summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Hellmann <doug.hellmann@dreamhost.com>2012-05-06 21:16:43 -0400
committerDoug Hellmann <doug.hellmann@dreamhost.com>2012-05-06 21:16:43 -0400
commit43aa8d395ef0da07c81e1ed9cc729ddca0be7281 (patch)
treeaa1ed7626489814bdd71675cf2a0811741f728df
parent6efada5b6a084e5e22e3b7a225375ff8132be255 (diff)
downloadcliff-tablib-43aa8d395ef0da07c81e1ed9cc729ddca0be7281.tar.gz
move the column option so it applies to "show" commands, too
-rw-r--r--cliff/display.py8
-rw-r--r--cliff/formatters/table.py4
-rw-r--r--cliff/lister.py12
-rw-r--r--cliff/show.py12
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