Skip to content

Commit

Permalink
Make show option compatible with Python 2.6.
Browse files Browse the repository at this point in the history
Change-Id: I573ba628e1f7d4e1f6d71223e27f2301db7eb080
Closes-Bug: #1322931
  • Loading branch information
ftersin committed Jun 5, 2014
1 parent 4bdf5fc commit e3bec7b
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 29 deletions.
14 changes: 14 additions & 0 deletions 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
Expand Down Expand Up @@ -80,3 +90,7 @@ def run(self, parsed_args):
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)
12 changes: 1 addition & 11 deletions 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
Expand Down Expand Up @@ -56,7 +46,7 @@ def produce_output(self, parsed_args, column_names, data):
# 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,
Expand Down
3 changes: 1 addition & 2 deletions 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
Expand Down Expand Up @@ -38,7 +37,7 @@ def produce_output(self, parsed_args, column_names, data):
# 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,
Expand Down
36 changes: 20 additions & 16 deletions cliff/tests/test_show.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python

import weakref

from cliff.show import ShowOne

import mock
Expand All @@ -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
Expand All @@ -29,21 +32,22 @@ def take_action(self, parsed_args):
)


# 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()
Expand Down

0 comments on commit e3bec7b

Please sign in to comment.