summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Hellmann <doug.hellmann@dreamhost.com>2012-06-18 18:13:59 -0400
committerDoug Hellmann <doug.hellmann@dreamhost.com>2012-06-18 18:13:59 -0400
commit9bb0a4a13acfce6a0924514b883417875a1143dc (patch)
treefa63700c7a47489a7aa18f8aef7289773a675cc3
parenta7987bc9d562341967305b20a174658dc556ce20 (diff)
parent1473b678ce4219f5119ae9e98af0fa5d7e21992d (diff)
downloadcliff-tablib-9bb0a4a13acfce6a0924514b883417875a1143dc.tar.gz
merge API refactoring work
-rw-r--r--cliff/command.py7
-rw-r--r--cliff/display.py17
-rw-r--r--cliff/help.py2
-rw-r--r--cliff/lister.py16
-rw-r--r--cliff/show.py15
-rw-r--r--demoapp/cliffdemo/list.py2
-rw-r--r--demoapp/cliffdemo/show.py2
-rw-r--r--tests/test_command.py2
-rw-r--r--tests/test_help.py2
9 files changed, 35 insertions, 30 deletions
diff --git a/cliff/command.py b/cliff/command.py
index 7ff526e..e369988 100644
--- a/cliff/command.py
+++ b/cliff/command.py
@@ -32,6 +32,13 @@ class Command(object):
return parser
@abc.abstractmethod
+ def take_action(self, parsed_args):
+ """Return a two-part tuple with a tuple of column names
+ and a tuple of values.
+ """
+
def run(self, parsed_args):
"""Do something useful.
"""
+ self.take_action(parsed_args)
+ return 0
diff --git a/cliff/display.py b/cliff/display.py
index 09c68ce..3c05760 100644
--- a/cliff/display.py
+++ b/cliff/display.py
@@ -70,14 +70,17 @@ class DisplayCommandBase(Command):
return parser
@abc.abstractmethod
- def get_data(self, parsed_args):
- """Return a two-part tuple with a tuple of column names
- and a tuple of values.
+ def produce_output(self, parsed_args, column_names, data):
+ """Use the formatter to generate the output.
+
+ :param parsed_args: argparse.Namespace instance with argument values
+ :param column_names: sequence of strings containing names
+ of output columns
+ :param data: iterable with values matching the column names
"""
- @abc.abstractmethod
def run(self, parsed_args):
- column_names, data = self.get_data(parsed_args)
- formatter = self.formatters[parsed_args.formatter]
- formatter.emit_one(column_names, data, self.app.stdout, parsed_args)
+ self.formatter = self.formatters[parsed_args.formatter]
+ column_names, data = self.take_action(parsed_args)
+ self.produce_output(parsed_args, column_names, data)
return 0
diff --git a/cliff/help.py b/cliff/help.py
index cd427d7..49cfd16 100644
--- a/cliff/help.py
+++ b/cliff/help.py
@@ -36,7 +36,7 @@ class HelpCommand(Command):
)
return parser
- def run(self, parsed_args):
+ def take_action(self, parsed_args):
if parsed_args.cmd:
try:
the_cmd = self.app.command_manager.find_command(
diff --git a/cliff/lister.py b/cliff/lister.py
index bef2d17..406be97 100644
--- a/cliff/lister.py
+++ b/cliff/lister.py
@@ -24,13 +24,12 @@ class Lister(DisplayCommandBase):
return 'table'
@abc.abstractmethod
- def get_data(self, parsed_args):
+ def take_action(self, parsed_args):
"""Return a tuple containing the column names and an iterable
containing the data to be listed.
"""
- def run(self, parsed_args):
- column_names, data = self.get_data(parsed_args)
+ def produce_output(self, parsed_args, column_names, data):
if not parsed_args.columns:
columns_to_include = column_names
data_gen = data
@@ -50,10 +49,9 @@ class Lister(DisplayCommandBase):
# list so the table formatter can ask for its length.
data_gen = (list(itertools.compress(row, selector))
for row in data)
- formatter = self.formatters[parsed_args.formatter]
- formatter.emit_list(columns_to_include,
- data_gen,
- self.app.stdout,
- parsed_args,
- )
+ self.formatter.emit_list(columns_to_include,
+ data_gen,
+ self.app.stdout,
+ parsed_args,
+ )
return 0
diff --git a/cliff/show.py b/cliff/show.py
index 1c00bf2..39e94b1 100644
--- a/cliff/show.py
+++ b/cliff/show.py
@@ -24,13 +24,12 @@ class ShowOne(DisplayCommandBase):
return 'table'
@abc.abstractmethod
- def get_data(self, parsed_args):
+ def take_action(self, parsed_args):
"""Return a two-part tuple with a tuple of column names
and a tuple of values.
"""
- def run(self, parsed_args):
- column_names, data = self.get_data(parsed_args)
+ def produce_output(self, parsed_args, column_names, data):
if not parsed_args.columns:
columns_to_include = column_names
else:
@@ -40,10 +39,8 @@ class ShowOne(DisplayCommandBase):
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(columns_to_include,
- data,
- self.app.stdout,
- parsed_args,
- )
+ self.formatter.emit_one(columns_to_include,
+ data,
+ self.app.stdout,
+ parsed_args)
return 0
diff --git a/demoapp/cliffdemo/list.py b/demoapp/cliffdemo/list.py
index 124997f..3dcee4a 100644
--- a/demoapp/cliffdemo/list.py
+++ b/demoapp/cliffdemo/list.py
@@ -12,7 +12,7 @@ class Files(Lister):
log = logging.getLogger(__name__)
- def get_data(self, parsed_args):
+ def take_action(self, parsed_args):
return (('Name', 'Size'),
((n, os.stat(n).st_size) for n in os.listdir('.'))
)
diff --git a/demoapp/cliffdemo/show.py b/demoapp/cliffdemo/show.py
index 54d98be..9351148 100644
--- a/demoapp/cliffdemo/show.py
+++ b/demoapp/cliffdemo/show.py
@@ -14,7 +14,7 @@ class File(ShowOne):
parser.add_argument('filename', nargs='?', default='.')
return parser
- def get_data(self, parsed_args):
+ def take_action(self, parsed_args):
stat_data = os.stat(parsed_args.filename)
columns = ('Name',
'Size',
diff --git a/tests/test_command.py b/tests/test_command.py
index 8b0d217..39fde51 100644
--- a/tests/test_command.py
+++ b/tests/test_command.py
@@ -6,7 +6,7 @@ class TestCommand(Command):
"""Description of command.
"""
- def run(self, parsed_args):
+ def take_action(self, parsed_args):
return
diff --git a/tests/test_help.py b/tests/test_help.py
index 8c7e7ed..6d67356 100644
--- a/tests/test_help.py
+++ b/tests/test_help.py
@@ -28,7 +28,7 @@ class TestCommand(Command):
# so parse_args() is called.
return TestParser()
- def run(self, args):
+ def take_action(self, args):
return