|
13 | 13 | # under the License. |
14 | 14 | # |
15 | 15 |
|
| 16 | +import json |
16 | 17 | import logging |
| 18 | +import six |
17 | 19 |
|
18 | 20 | from cliff import command |
19 | 21 | from cliff import lister |
20 | 22 | from cliff import show |
21 | 23 |
|
22 | 24 |
|
23 | | -class CreateCommand(show.ShowOne): |
| 25 | +class BaseShowCommand(show.ShowOne): |
| 26 | + json_indent = None |
| 27 | + |
| 28 | + def dumps(self, value, indent=None): |
| 29 | + try: |
| 30 | + return json.dumps(value, indent=indent) |
| 31 | + except TypeError: |
| 32 | + pass |
| 33 | + return json.dumps(to_primitive(value)) |
| 34 | + |
| 35 | + def format_data(self, data): |
| 36 | + # Modify data to make it more readable |
| 37 | + if not(self.name in data): |
| 38 | + return data |
| 39 | + for k, v in data[self.name].iteritems(): |
| 40 | + if isinstance(v, list): |
| 41 | + value = '\n'.join(self.dumps( |
| 42 | + i, indent=self.json_indent) if isinstance(i, dict) |
| 43 | + else str(i) for i in v) |
| 44 | + data[self.name][k] = value |
| 45 | + print '***********************************' |
| 46 | + print value.__class__.__name__ |
| 47 | + print str(value) |
| 48 | + print '***********************************' |
| 49 | + elif isinstance(v, dict): |
| 50 | + value = self.dumps(v, indent=self.json_indent) |
| 51 | + data[self.name][k] = value |
| 52 | + elif v is None: |
| 53 | + data[self.name][k] = '' |
| 54 | + return data[self.name] |
| 55 | + |
| 56 | + |
| 57 | +class CreateCommand(BaseShowCommand): |
24 | 58 |
|
25 | 59 | log = logging.getLogger(__name__ + '.CreateCommand') |
26 | 60 |
|
@@ -131,33 +165,36 @@ def take_action(self, parsed_args): |
131 | 165 | return neuter.take_action(parsed_args) |
132 | 166 |
|
133 | 167 |
|
134 | | -class ShowCommand(show.ShowOne): |
| 168 | +class ShowCommand(BaseShowCommand): |
135 | 169 |
|
136 | 170 | log = logging.getLogger(__name__ + '.ShowCommand') |
137 | | - name = "id" |
138 | | - metavar = "<id>" |
139 | | - help_text = "Identifier of object to delete" |
| 171 | + |
| 172 | + def __init__(self, app, app_args): |
| 173 | + super(ShowCommand, self).__init__(app, app_args) |
| 174 | + self.metavar = "<" + self.name + ">" |
| 175 | + self.help_text = "Name or identifier of " + \ |
| 176 | + self.name.replace('_', ' ') + " to show" |
| 177 | + self.func = self.name |
| 178 | + self.response = self.name |
140 | 179 |
|
141 | 180 | def get_client(self): |
142 | 181 | return self.app.client_manager.network |
143 | 182 |
|
144 | 183 | def get_parser(self, prog_name): |
145 | 184 | parser = super(ShowCommand, self).get_parser(prog_name) |
146 | 185 | parser.add_argument( |
147 | | - self.name, |
| 186 | + 'identifier', |
148 | 187 | metavar=self.metavar, |
149 | | - help=self.help_text, |
| 188 | + help=self.help_text |
150 | 189 | ) |
151 | 190 | return parser |
152 | 191 |
|
153 | 192 | def take_action(self, parsed_args): |
154 | 193 | self.log.debug('take_action(%s)' % parsed_args) |
155 | | - neuter = self.clazz(self.app, self.app_args) |
156 | | - neuter.get_client = self.get_client |
157 | | - parsed_args.show_details = True |
158 | | - parsed_args.request_format = 'json' |
159 | | - parsed_args.fields = [] |
160 | | - return neuter.take_action(parsed_args) |
| 194 | + method = getattr(self.app.client_manager.network, "show_" + self.func) |
| 195 | + data = method(parsed_args.identifier) |
| 196 | + data = self.format_data(data) |
| 197 | + return zip(*sorted(six.iteritems(data))) |
161 | 198 |
|
162 | 199 |
|
163 | 200 | class AddCommand(command.Command): |
|
0 commit comments