diff options
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) |