summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFeodor Tersin <ftersin@cloudscaling.com>2014-05-28 01:31:53 +0400
committerFeodor Tersin <ftersin@cloudscaling.com>2014-06-06 00:44:16 +0400
commite3bec7be19c8cfa8e8025e84bf0444109dcce730 (patch)
tree0312860ea55d92ec13cb6f950fa8f269c3c31383
parent4bdf5fc90ee3e84ac675f5f26f7a0d94aacf91c5 (diff)
downloadcliff-e3bec7be19c8cfa8e8025e84bf0444109dcce730.tar.gz
Make show option compatible with Python 2.6.
Change-Id: I573ba628e1f7d4e1f6d71223e27f2301db7eb080 Closes-Bug: #1322931
-rw-r--r--cliff/display.py14
-rw-r--r--cliff/lister.py12
-rw-r--r--cliff/show.py3
-rw-r--r--cliff/tests/test_show.py36
4 files changed, 36 insertions, 29 deletions
diff --git a/cliff/display.py b/cliff/display.py
index e04fd29..74f7289 100644
--- a/cliff/display.py
+++ b/cliff/display.py
@@ -1,6 +1,16 @@
"""Application base class for displaying data.
"""
import abc
+
+try:
+ from itertools import compress
+except ImportError:
+ # for py26 compat
+ from itertools import izip
+
+ def compress(data, selectors):
+ return (d for d, s in izip(data, selectors) if s)
+
import logging
import stevedore
@@ -80,3 +90,7 @@ class DisplayCommandBase(Command):
column_names, data = self.take_action(parsed_args)
self.produce_output(parsed_args, column_names, data)
return 0
+
+ @staticmethod
+ def _compress_iterable(iterable, selectors):
+ return compress(iterable, selectors)
diff --git a/cliff/lister.py b/cliff/lister.py
index 1b6c3b6..1e01a3a 100644
--- a/cliff/lister.py
+++ b/cliff/lister.py
@@ -1,16 +1,6 @@
"""Application base class for providing a list of data as output.
"""
import abc
-
-try:
- from itertools import compress
-except ImportError:
- # for py26 compat
- from itertools import izip
-
- def compress(data, selectors):
- return (d for d, s in izip(data, selectors) if s)
-
import logging
from .display import DisplayCommandBase
@@ -56,7 +46,7 @@ class Lister(DisplayCommandBase):
# of data that the user has expressed interest in
# seeing. We have to convert the compress() output to a
# list so the table formatter can ask for its length.
- data_gen = (list(compress(row, selector))
+ data_gen = (list(self._compress_iterable(row, selector))
for row in data)
self.formatter.emit_list(columns_to_include,
data_gen,
diff --git a/cliff/show.py b/cliff/show.py
index 855b2d2..36c4bd4 100644
--- a/cliff/show.py
+++ b/cliff/show.py
@@ -1,7 +1,6 @@
"""Application base class for displaying data about a single object.
"""
import abc
-import itertools
import logging
from .display import DisplayCommandBase
@@ -38,7 +37,7 @@ class ShowOne(DisplayCommandBase):
# Set up argument to compress()
selector = [(c in columns_to_include)
for c in column_names]
- data = list(itertools.compress(data, selector))
+ data = list(self._compress_iterable(data, selector))
self.formatter.emit_one(columns_to_include,
data,
self.app.stdout,
diff --git a/cliff/tests/test_show.py b/cliff/tests/test_show.py
index 41df5e1..5db07ec 100644
--- a/cliff/tests/test_show.py
+++ b/cliff/tests/test_show.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python
+import weakref
+
from cliff.show import ShowOne
import mock
@@ -9,15 +11,16 @@ class FauxFormatter(object):
def __init__(self):
self.args = []
+ self.obj = weakref.proxy(self)
- def emit_list(self, columns, data, stdout, args):
+ def emit_one(self, columns, data, stdout, args):
self.args.append((columns, data))
class ExerciseShowOne(ShowOne):
- def load_formatter_plugins(self):
- self.formatters = {
+ def _load_formatter_plugins(self):
+ return {
'test': FauxFormatter(),
}
return
@@ -29,21 +32,22 @@ class ExerciseShowOne(ShowOne):
)
-# def test_formatter_args():
-# app = mock.Mock()
-# test_lister = ExerciseLister(app, [])
+def test_formatter_args():
+ app = mock.Mock()
+ test_show = ExerciseShowOne(app, [])
+
+ parsed_args = mock.Mock()
+ parsed_args.columns = ('Col1', 'Col2')
+ parsed_args.formatter = 'test'
-# parsed_args = mock.Mock()
-# parsed_args.columns = ('Col1', 'Col2')
-# parsed_args.formatter = 'test'
+ test_show.run(parsed_args)
+ f = test_show._formatter_plugins['test']
+ assert len(f.args) == 1
+ args = f.args[0]
+ assert args[0] == list(parsed_args.columns)
+ data = list(args[1])
+ assert data == [('a', 'A'), ('b', 'B')]
-# test_lister.run(parsed_args)
-# f = test_lister.formatters['test']
-# assert len(f.args) == 1
-# args = f.args[0]
-# assert args[0] == list(parsed_args.columns)
-# data = list(args[1])
-# assert data == [['a', 'A'], ['b', 'B']]
def test_dict2columns():
app = mock.Mock()