From 43aa8d395ef0da07c81e1ed9cc729ddca0be7281 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Sun, 6 May 2012 21:16:43 -0400 Subject: move the column option so it applies to "show" commands, too --- cliff/display.py | 8 ++++++++ cliff/formatters/table.py | 4 +--- cliff/lister.py | 12 ------------ cliff/show.py | 12 +++++++++++- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/cliff/display.py b/cliff/display.py index 14497fe..2d9a7f7 100644 --- a/cliff/display.py +++ b/cliff/display.py @@ -57,6 +57,14 @@ class DisplayCommandBase(Command): default=formatter_default, help='the output format to use, defaults to %s' % formatter_default, ) + formatter_group.add_argument( + '-c', '--column', + action='append', + default=[], + dest='columns', + metavar='COLUMN', + help='specify the column(s) to include, can be repeated', + ) for name, formatter in sorted(self.formatters.items()): formatter.add_argument_group(parser) return parser diff --git a/cliff/formatters/table.py b/cliff/formatters/table.py index 056557f..d03bcca 100644 --- a/cliff/formatters/table.py +++ b/cliff/formatters/table.py @@ -52,10 +52,8 @@ class TableFormatter(ListFormatter, SingleFormatter): # not all the same type. x.align['Field'] = 'l' x.align['Value'] = 'l' - desired_columns = parsed_args.columns for name, value in zip(column_names, data): - if name in desired_columns or not desired_columns: - x.add_row((name, value)) + x.add_row((name, value)) formatted = x.get_string(fields=('Field', 'Value')) stdout.write(formatted) stdout.write('\n') diff --git a/cliff/lister.py b/cliff/lister.py index 24e3127..abf3771 100644 --- a/cliff/lister.py +++ b/cliff/lister.py @@ -29,18 +29,6 @@ class Lister(DisplayCommandBase): containing the data to be listed. """ - def get_parser(self, prog_name): - parser = super(Lister, self).get_parser(prog_name) - parser.add_argument( - '-c', '--column', - action='append', - default=[], - dest='columns', - metavar='COLUMN', - help='specify the column(s) to include, can be repeated', - ) - return parser - def run(self, parsed_args): column_names, data = self.get_data(parsed_args) if not parsed_args.columns: diff --git a/cliff/show.py b/cliff/show.py index b2c7945..34af0b4 100644 --- a/cliff/show.py +++ b/cliff/show.py @@ -1,6 +1,7 @@ """Application base class for displaying data about a single object. """ import abc +import itertools import logging from .display import DisplayCommandBase @@ -30,6 +31,15 @@ class ShowOne(DisplayCommandBase): def run(self, parsed_args): column_names, data = self.get_data(parsed_args) + if not parsed_args.columns: + columns_to_include = column_names + else: + columns_to_include = [c for c in column_names + if c in parsed_args.columns] + # Set up argument to compress() + selector = [(c in columns_to_include) + for c in column_names] + data = list(itertools.compress(data, selector)) formatter = self.formatters[parsed_args.formatter] - formatter.emit_one(column_names, data, self.app.stdout, parsed_args) + formatter.emit_one(columns_to_include, data, self.app.stdout, parsed_args) return 0 -- cgit v1.2.1