summaryrefslogtreecommitdiff
path: root/gitlab/v4/cli.py
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2018-03-02 16:15:05 +0100
committerGauvain Pocentek <gauvain@pocentek.net>2018-03-02 16:15:44 +0100
commit4bdce7a6b6299c3d80ac602f3d917032b5eaabff (patch)
tree4b57d1bde6419c58a991acea0e4b159b8a2fb80e /gitlab/v4/cli.py
parent6c08266ee93f6a038e8f96253791b4e5793237b1 (diff)
downloadgitlab-4bdce7a6b6299c3d80ac602f3d917032b5eaabff.tar.gz
[cli] fix listing for json and yaml output
Fixes #438
Diffstat (limited to 'gitlab/v4/cli.py')
-rw-r--r--gitlab/v4/cli.py59
1 files changed, 35 insertions, 24 deletions
diff --git a/gitlab/v4/cli.py b/gitlab/v4/cli.py
index 939a7cc..61dd14b 100644
--- a/gitlab/v4/cli.py
+++ b/gitlab/v4/cli.py
@@ -248,19 +248,34 @@ def extend_parser(parser):
return parser
+def get_dict(obj, fields):
+ if fields:
+ return {k: v for k, v in obj.attributes.items()
+ if k in fields}
+ return obj.attributes
+
+
class JSONPrinter(object):
def display(self, d, **kwargs):
import json # noqa
-
print(json.dumps(d))
+ def display_list(self, data, fields):
+ import json # noqa
+ print(json.dumps([get_dict(obj, fields) for obj in data]))
+
class YAMLPrinter(object):
def display(self, d, **kwargs):
import yaml # noqa
-
print(yaml.safe_dump(d, default_flow_style=False))
+ def display_list(self, data, fields):
+ import yaml # noqa
+ print(yaml.safe_dump(
+ [get_dict(obj, fields) for obj in data],
+ default_flow_style=False))
+
class LegacyPrinter(object):
def display(self, d, **kwargs):
@@ -300,6 +315,15 @@ class LegacyPrinter(object):
value = getattr(obj, obj._short_print_attr)
print('%s: %s' % (obj._short_print_attr, value))
+ def display_list(self, data, fields, **kwargs):
+ verbose = kwargs.get('verbose', False)
+ for obj in data:
+ if isinstance(obj, gitlab.base.RESTObject):
+ self.display(get_dict(obj, fields), verbose=verbose, obj=obj)
+ else:
+ print(obj)
+ print('')
+
PRINTERS = {
'json': JSONPrinter,
@@ -310,28 +334,15 @@ PRINTERS = {
def run(gl, what, action, args, verbose, output, fields):
g_cli = GitlabCLI(gl, what, action, args)
- ret_val = g_cli()
+ data = g_cli()
printer = PRINTERS[output]()
- def get_dict(obj):
- if fields:
- return {k: v for k, v in obj.attributes.items()
- if k in fields}
- return obj.attributes
-
- if isinstance(ret_val, dict):
- printer.display(ret_val, verbose=True, obj=ret_val)
- elif isinstance(ret_val, list):
- for obj in ret_val:
- if isinstance(obj, gitlab.base.RESTObject):
- printer.display(get_dict(obj), verbose=verbose, obj=obj)
- else:
- print(obj)
- print('')
- elif isinstance(ret_val, dict):
- printer.display(ret_val, verbose=verbose, obj=ret_val)
- elif isinstance(ret_val, gitlab.base.RESTObject):
- printer.display(get_dict(ret_val), verbose=verbose, obj=ret_val)
- elif isinstance(ret_val, six.string_types):
- print(ret_val)
+ if isinstance(data, dict):
+ printer.display(data, verbose=True, obj=data)
+ elif isinstance(data, list):
+ printer.display_list(data, fields, verbose=verbose)
+ elif isinstance(data, gitlab.base.RESTObject):
+ printer.display(get_dict(data, fields), verbose=verbose, obj=data)
+ elif isinstance(data, six.string_types):
+ print(data)