diff --git a/tuskarclient/common/formatting.py b/tuskarclient/common/formatting.py index a457c93..7cf6d40 100644 --- a/tuskarclient/common/formatting.py +++ b/tuskarclient/common/formatting.py @@ -10,6 +10,10 @@ # License for the specific language governing permissions and limitations # under the License. +from __future__ import print_function + +import sys + import prettytable @@ -17,7 +21,8 @@ def pretty_choice_list(l): return ', '.join("'%s'" % i for i in l) -def print_list(objs, fields, formatters={}, custom_labels={}, sortby=0): +def print_list(objs, fields, formatters={}, custom_labels={}, sortby=0, + outfile=sys.stdout): '''Prints a list of objects. :param objs: list of objects to print @@ -53,10 +58,10 @@ def print_list(objs, fields, formatters={}, custom_labels={}, sortby=0): else: row.append(getattr(o, field, '')) pt.add_row(row) - print(pt.get_string(sortby=field_labels[sortby])) + print(pt.get_string(sortby=field_labels[sortby]), file=outfile) -def print_dict(d, formatters={}, custom_labels={}): +def print_dict(d, formatters={}, custom_labels={}, outfile=sys.stdout): '''Prints a dict. :param d: dict to print @@ -77,7 +82,7 @@ def print_dict(d, formatters={}, custom_labels={}): pt.add_row([label, formatters[field](d[field])]) else: pt.add_row([label, d[field]]) - print(pt.get_string(sortby='Property')) + print(pt.get_string(sortby='Property'), file=outfile) def attr_proxy(attr, formatter=lambda a: a, allow_undefined=True): diff --git a/tuskarclient/tests/common/test_formatting.py b/tuskarclient/tests/common/test_formatting.py index b5af3b9..7b7ae44 100644 --- a/tuskarclient/tests/common/test_formatting.py +++ b/tuskarclient/tests/common/test_formatting.py @@ -10,8 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import io import mock -from six import StringIO import tuskarclient.common.formatting as fmt import tuskarclient.tests.utils as tutils @@ -19,13 +19,17 @@ import tuskarclient.tests.utils as tutils class PrintTest(tutils.TestCase): - @mock.patch('sys.stdout', new_callable=StringIO) - def test_print_dict(self, mock_out): + def setUp(self): + super(PrintTest, self).setUp() + self.outfile = io.StringIO() + + def test_print_dict(self): dict_ = {'k': 'v', 'key': 'value'} formatters = {'key': lambda v: 'custom ' + v} custom_labels = {'k': 'custom_key'} - fmt.print_dict(dict_, formatters, custom_labels) + fmt.print_dict(dict_, formatters, custom_labels, + outfile=self.outfile) self.assertEqual( ('+------------+--------------+\n' '| Property | Value |\n' @@ -33,11 +37,10 @@ class PrintTest(tutils.TestCase): '| custom_key | v |\n' '| key | custom value |\n' '+------------+--------------+\n'), - mock_out.getvalue() + self.outfile.getvalue() ) - @mock.patch('sys.stdout', new_callable=StringIO) - def test_print_list(self, mock_out): + def test_print_list(self): fields = ['thing', 'color', '!artistic_name'] formatters = { '!artistic_name': lambda obj: '{0} {1}'.format(obj.color, @@ -46,7 +49,8 @@ class PrintTest(tutils.TestCase): } custom_labels = {'thing': 'name', '!artistic_name': 'artistic name'} - fmt.print_list(self.objects(), fields, formatters, custom_labels) + fmt.print_list(self.objects(), fields, formatters, custom_labels, + outfile=self.outfile) self.assertEqual( ('+------+-------+-----------------+\n' '| name | color | artistic name |\n' @@ -54,11 +58,10 @@ class PrintTest(tutils.TestCase): '| moon | green | dark green moon |\n' '| sun | blue | bright blue sun |\n' '+------+-------+-----------------+\n'), - mock_out.getvalue() + self.outfile.getvalue() ) - @mock.patch('sys.stdout', new_callable=StringIO) - def test_print_list_custom_field_without_formatter(self, mock_out): + def test_print_list_custom_field_without_formatter(self): fields = ['!artistic_name'] self.assertRaises(KeyError, fmt.print_list, self.objects(), fields)