Skip to content

Commit 4bdce7a

Browse files
author
Gauvain Pocentek
committed
[cli] fix listing for json and yaml output
Fixes #438
1 parent 6c08266 commit 4bdce7a

File tree

1 file changed

+35
-24
lines changed

1 file changed

+35
-24
lines changed

gitlab/v4/cli.py

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -248,19 +248,34 @@ def extend_parser(parser):
248248
return parser
249249

250250

251+
def get_dict(obj, fields):
252+
if fields:
253+
return {k: v for k, v in obj.attributes.items()
254+
if k in fields}
255+
return obj.attributes
256+
257+
251258
class JSONPrinter(object):
252259
def display(self, d, **kwargs):
253260
import json # noqa
254-
255261
print(json.dumps(d))
256262

263+
def display_list(self, data, fields):
264+
import json # noqa
265+
print(json.dumps([get_dict(obj, fields) for obj in data]))
266+
257267

258268
class YAMLPrinter(object):
259269
def display(self, d, **kwargs):
260270
import yaml # noqa
261-
262271
print(yaml.safe_dump(d, default_flow_style=False))
263272

273+
def display_list(self, data, fields):
274+
import yaml # noqa
275+
print(yaml.safe_dump(
276+
[get_dict(obj, fields) for obj in data],
277+
default_flow_style=False))
278+
264279

265280
class LegacyPrinter(object):
266281
def display(self, d, **kwargs):
@@ -300,6 +315,15 @@ def display_dict(d, padding):
300315
value = getattr(obj, obj._short_print_attr)
301316
print('%s: %s' % (obj._short_print_attr, value))
302317

318+
def display_list(self, data, fields, **kwargs):
319+
verbose = kwargs.get('verbose', False)
320+
for obj in data:
321+
if isinstance(obj, gitlab.base.RESTObject):
322+
self.display(get_dict(obj, fields), verbose=verbose, obj=obj)
323+
else:
324+
print(obj)
325+
print('')
326+
303327

304328
PRINTERS = {
305329
'json': JSONPrinter,
@@ -310,28 +334,15 @@ def display_dict(d, padding):
310334

311335
def run(gl, what, action, args, verbose, output, fields):
312336
g_cli = GitlabCLI(gl, what, action, args)
313-
ret_val = g_cli()
337+
data = g_cli()
314338

315339
printer = PRINTERS[output]()
316340

317-
def get_dict(obj):
318-
if fields:
319-
return {k: v for k, v in obj.attributes.items()
320-
if k in fields}
321-
return obj.attributes
322-
323-
if isinstance(ret_val, dict):
324-
printer.display(ret_val, verbose=True, obj=ret_val)
325-
elif isinstance(ret_val, list):
326-
for obj in ret_val:
327-
if isinstance(obj, gitlab.base.RESTObject):
328-
printer.display(get_dict(obj), verbose=verbose, obj=obj)
329-
else:
330-
print(obj)
331-
print('')
332-
elif isinstance(ret_val, dict):
333-
printer.display(ret_val, verbose=verbose, obj=ret_val)
334-
elif isinstance(ret_val, gitlab.base.RESTObject):
335-
printer.display(get_dict(ret_val), verbose=verbose, obj=ret_val)
336-
elif isinstance(ret_val, six.string_types):
337-
print(ret_val)
341+
if isinstance(data, dict):
342+
printer.display(data, verbose=True, obj=data)
343+
elif isinstance(data, list):
344+
printer.display_list(data, fields, verbose=verbose)
345+
elif isinstance(data, gitlab.base.RESTObject):
346+
printer.display(get_dict(data, fields), verbose=verbose, obj=data)
347+
elif isinstance(data, six.string_types):
348+
print(data)

0 commit comments

Comments
 (0)