diff options
author | Gauvain Pocentek <gauvain@pocentek.net> | 2018-03-02 16:15:05 +0100 |
---|---|---|
committer | Gauvain Pocentek <gauvain@pocentek.net> | 2018-03-02 16:15:44 +0100 |
commit | 4bdce7a6b6299c3d80ac602f3d917032b5eaabff (patch) | |
tree | 4b57d1bde6419c58a991acea0e4b159b8a2fb80e /gitlab/v4/cli.py | |
parent | 6c08266ee93f6a038e8f96253791b4e5793237b1 (diff) | |
download | gitlab-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.py | 59 |
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) |