From e3bec7be19c8cfa8e8025e84bf0444109dcce730 Mon Sep 17 00:00:00 2001 From: Feodor Tersin Date: Wed, 28 May 2014 01:31:53 +0400 Subject: Make show option compatible with Python 2.6. Change-Id: I573ba628e1f7d4e1f6d71223e27f2301db7eb080 Closes-Bug: #1322931 --- cliff/display.py | 14 ++++++++++++++ cliff/lister.py | 12 +----------- cliff/show.py | 3 +-- cliff/tests/test_show.py | 36 ++++++++++++++++++++---------------- 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() -- cgit v1.2.1