Skip to content

Commit f0fafec

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Use cliff formattable columns in image commands"
2 parents 34a92ee + 8d63e3f commit f0fafec

9 files changed

Lines changed: 69 additions & 66 deletions

File tree

openstackclient/image/v1/image.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
import os
2222
import sys
2323

24+
from cliff import columns as cliff_columns
2425
from glanceclient.common import utils as gc_utils
2526
from osc_lib.api import utils as api_utils
27+
from osc_lib.cli import format_columns
2628
from osc_lib.cli import parseractions
2729
from osc_lib.command import command
2830
from osc_lib import utils
@@ -46,19 +48,18 @@
4648
LOG = logging.getLogger(__name__)
4749

4850

49-
def _format_visibility(data):
50-
"""Return a formatted visibility string
51+
class VisibilityColumn(cliff_columns.FormattableColumn):
52+
def human_readable(self):
53+
"""Return a formatted visibility string
5154
52-
:param data:
53-
The server's visibility (is_public) status value: True, False
54-
:rtype:
55-
A string formatted to public/private
56-
"""
55+
:rtype:
56+
A string formatted to public/private
57+
"""
5758

58-
if data:
59-
return 'public'
60-
else:
61-
return 'private'
59+
if self._value:
60+
return 'public'
61+
else:
62+
return 'private'
6263

6364

6465
class CreateImage(command.ShowOne):
@@ -268,7 +269,8 @@ def take_action(self, parsed_args):
268269
kwargs['data'].close()
269270

270271
info.update(image._info)
271-
info['properties'] = utils.format_dict(info.get('properties', {}))
272+
info['properties'] = format_columns.DictColumn(
273+
info.get('properties', {}))
272274
return zip(*sorted(six.iteritems(info)))
273275

274276

@@ -429,8 +431,8 @@ def take_action(self, parsed_args):
429431
s,
430432
columns,
431433
formatters={
432-
'is_public': _format_visibility,
433-
'properties': utils.format_dict,
434+
'is_public': VisibilityColumn,
435+
'properties': format_columns.DictColumn,
434436
},
435437
) for s in data)
436438
)
@@ -714,5 +716,6 @@ def take_action(self, parsed_args):
714716
if parsed_args.human_readable:
715717
if 'size' in info:
716718
info['size'] = utils.format_size(info['size'])
717-
info['properties'] = utils.format_dict(info.get('properties', {}))
719+
info['properties'] = format_columns.DictColumn(
720+
info.get('properties', {}))
718721
return zip(*sorted(six.iteritems(info)))

openstackclient/image/v2/image.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from glanceclient.common import utils as gc_utils
2323
from openstack.image import image_signer
2424
from osc_lib.api import utils as api_utils
25+
from osc_lib.cli import format_columns
2526
from osc_lib.cli import parseractions
2627
from osc_lib.command import command
2728
from osc_lib import exceptions
@@ -65,11 +66,11 @@ def _format_image(image):
6566
properties[key] = image.get(key)
6667

6768
# format the tags if they are there
68-
info['tags'] = utils.format_list(image.get('tags'))
69+
info['tags'] = format_columns.ListColumn(image.get('tags'))
6970

7071
# add properties back into the dictionary as a top-level key
7172
if properties:
72-
info['properties'] = utils.format_dict(properties)
73+
info['properties'] = format_columns.DictColumn(properties)
7374

7475
return info
7576

@@ -656,7 +657,7 @@ def take_action(self, parsed_args):
656657
s,
657658
columns,
658659
formatters={
659-
'tags': utils.format_list,
660+
'tags': format_columns.ListColumn,
660661
},
661662
) for s in data)
662663
)

openstackclient/tests/functional/image/v1/test_image.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,6 @@ def test_image_attributes(self):
104104
self.name
105105
))
106106
self.assertEqual(
107-
"a='b', c='d'",
107+
{'a': 'b', 'c': 'd'},
108108
json_output["properties"],
109109
)

openstackclient/tests/functional/image/v2/test_image.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import uuid
1515

1616
import fixtures
17-
# from glanceclient import exc as image_exceptions
1817

1918
from openstackclient.tests.functional.image import base
2019

@@ -81,7 +80,7 @@ def test_image_list_with_tag_filter(self):
8180
json_output = json.loads(self.openstack(
8281
'image list --tag ' + self.image_tag + ' --long -f json'
8382
))
84-
for taglist in [img['Tags'].split(', ') for img in json_output]:
83+
for taglist in [img['Tags'] for img in json_output]:
8584
self.assertIn(
8685
self.image_tag,
8786
taglist
@@ -127,10 +126,8 @@ def test_image_attributes(self):
127126
'image show -f json ' +
128127
self.name
129128
))
130-
# NOTE(dtroyer): Don't do a full-string compare so we are tolerant of
131-
# new artributes in the returned data
132-
self.assertIn("a='b'", json_output["properties"])
133-
self.assertIn("c='d'", json_output["properties"])
129+
self.assertIn("a", json_output["properties"])
130+
self.assertIn("c", json_output["properties"])
134131

135132
self.openstack(
136133
'image unset ' +
@@ -142,15 +139,13 @@ def test_image_attributes(self):
142139
'image show -f json ' +
143140
self.name
144141
))
145-
# NOTE(dtroyer): Don't do a full-string compare so we are tolerant of
146-
# new artributes in the returned data
147-
self.assertNotIn("a='b'", json_output["properties"])
148-
self.assertNotIn("c='d'", json_output["properties"])
142+
self.assertNotIn("a", json_output["properties"])
143+
self.assertNotIn("c", json_output["properties"])
149144

150145
# Test tags
151146
self.assertNotIn(
152147
'01',
153-
json_output["tags"].split(', ')
148+
json_output["tags"]
154149
)
155150
self.openstack(
156151
'image set ' +
@@ -163,7 +158,7 @@ def test_image_attributes(self):
163158
))
164159
self.assertIn(
165160
'01',
166-
json_output["tags"].split(', ')
161+
json_output["tags"]
167162
)
168163

169164
self.openstack(
@@ -177,7 +172,7 @@ def test_image_attributes(self):
177172
))
178173
self.assertNotIn(
179174
'01',
180-
json_output["tags"].split(', ')
175+
json_output["tags"]
181176
)
182177

183178
def test_image_set_rename(self):

openstackclient/tests/unit/compute/v2/test_server_backup.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import mock
1515

16+
from osc_lib.cli import format_columns
1617
from osc_lib import exceptions
1718
from osc_lib import utils as common_utils
1819

@@ -69,7 +70,7 @@ def image_data(self, image):
6970
image['owner'],
7071
image['protected'],
7172
'active',
72-
common_utils.format_list(image.get('tags')),
73+
format_columns.ListColumn(image.get('tags')),
7374
image['visibility'],
7475
)
7576
return datalist
@@ -134,7 +135,7 @@ def test_server_backup_defaults(self):
134135
)
135136

136137
self.assertEqual(self.image_columns(images[0]), columns)
137-
self.assertEqual(self.image_data(images[0]), data)
138+
self.assertItemEqual(self.image_data(images[0]), data)
138139

139140
def test_server_backup_create_options(self):
140141
servers = self.setup_servers_mock(count=1)
@@ -168,7 +169,7 @@ def test_server_backup_create_options(self):
168169
)
169170

170171
self.assertEqual(self.image_columns(images[0]), columns)
171-
self.assertEqual(self.image_data(images[0]), data)
172+
self.assertItemEqual(self.image_data(images[0]), data)
172173

173174
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
174175
def test_server_backup_wait_fail(self, mock_wait_for_status):
@@ -268,4 +269,4 @@ def test_server_backup_wait_ok(self, mock_wait_for_status):
268269
)
269270

270271
self.assertEqual(self.image_columns(images[0]), columns)
271-
self.assertEqual(self.image_data(images[0]), data)
272+
self.assertItemEqual(self.image_data(images[0]), data)

openstackclient/tests/unit/compute/v2/test_server_image.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#
1313
import mock
1414

15+
from osc_lib.cli import format_columns
1516
from osc_lib import exceptions
1617
from osc_lib import utils as common_utils
1718

@@ -67,7 +68,7 @@ def image_data(self, image):
6768
image['owner'],
6869
image['protected'],
6970
'active',
70-
common_utils.format_list(image.get('tags')),
71+
format_columns.ListColumn(image.get('tags')),
7172
image['visibility'],
7273
)
7374
return datalist
@@ -129,7 +130,7 @@ def test_server_image_create_defaults(self):
129130
)
130131

131132
self.assertEqual(self.image_columns(images[0]), columns)
132-
self.assertEqual(self.image_data(images[0]), data)
133+
self.assertItemEqual(self.image_data(images[0]), data)
133134

134135
def test_server_image_create_options(self):
135136
servers = self.setup_servers_mock(count=1)
@@ -157,7 +158,7 @@ def test_server_image_create_options(self):
157158
)
158159

159160
self.assertEqual(self.image_columns(images[0]), columns)
160-
self.assertEqual(self.image_data(images[0]), data)
161+
self.assertItemEqual(self.image_data(images[0]), data)
161162

162163
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
163164
def test_server_create_image_wait_fail(self, mock_wait_for_status):
@@ -225,4 +226,4 @@ def test_server_create_image_wait_ok(self, mock_wait_for_status):
225226
)
226227

227228
self.assertEqual(self.image_columns(images[0]), columns)
228-
self.assertEqual(self.image_data(images[0]), data)
229+
self.assertItemEqual(self.image_data(images[0]), data)

openstackclient/tests/unit/image/v1/test_image.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616
import copy
1717

1818
import mock
19+
20+
from osc_lib.cli import format_columns
1921
from osc_lib import exceptions
20-
from osc_lib import utils
2122

2223
from openstackclient.image.v1 import image
2324
from openstackclient.tests.unit import fakes
@@ -58,7 +59,7 @@ class TestImageCreate(TestImage):
5859
new_image.min_ram,
5960
new_image.name,
6061
new_image.owner,
61-
utils.format_dict(new_image.properties),
62+
format_columns.DictColumn(new_image.properties),
6263
new_image.protected,
6364
)
6465

@@ -106,7 +107,7 @@ def test_image_reserve_no_options(self):
106107
self.assertEqual(self.images_mock.update.call_args_list, [])
107108

108109
self.assertEqual(self.columns, columns)
109-
self.assertEqual(self.data, data)
110+
self.assertItemEqual(self.data, data)
110111

111112
def test_image_reserve_options(self):
112113
mock_exception = {
@@ -160,7 +161,7 @@ def test_image_reserve_options(self):
160161
self.assertEqual(self.images_mock.update.call_args_list, [])
161162

162163
self.assertEqual(self.columns, columns)
163-
self.assertEqual(self.data, data)
164+
self.assertItemEqual(self.data, data)
164165

165166
@mock.patch('openstackclient.image.v1.image.io.open', name='Open')
166167
def test_image_create_file(self, mock_open):
@@ -224,7 +225,7 @@ def test_image_create_file(self, mock_open):
224225
self.assertEqual(self.images_mock.update.call_args_list, [])
225226

226227
self.assertEqual(self.columns, columns)
227-
self.assertEqual(self.data, data)
228+
self.assertItemEqual(self.data, data)
228229

229230

230231
class TestImageDelete(TestImage):
@@ -410,12 +411,13 @@ def test_image_list_long_option(self):
410411
'',
411412
'',
412413
'',
413-
'public',
414+
image.VisibilityColumn(True),
414415
False,
415416
self._image.owner,
416-
"Alpha='a', Beta='b', Gamma='g'",
417+
format_columns.DictColumn(
418+
{'Alpha': 'a', 'Beta': 'b', 'Gamma': 'g'}),
417419
), )
418-
self.assertEqual(datalist, tuple(data))
420+
self.assertListItemEqual(datalist, tuple(data))
419421

420422
@mock.patch('osc_lib.api.utils.simple_filter')
421423
def test_image_list_property_option(self, sf_mock):
@@ -742,7 +744,7 @@ class TestImageShow(TestImage):
742744
_image.min_ram,
743745
_image.name,
744746
_image.owner,
745-
utils.format_dict(_image.properties),
747+
format_columns.DictColumn(_image.properties),
746748
_image.protected,
747749
_image.size,
748750
)
@@ -773,7 +775,7 @@ def test_image_show(self):
773775
)
774776

775777
self.assertEqual(self.columns, columns)
776-
self.assertEqual(self.data, data)
778+
self.assertItemEqual(self.data, data)
777779

778780
def test_image_show_human_readable(self):
779781
arglist = [

openstackclient/tests/unit/image/v2/fakes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from glanceclient.v2 import schemas
2121
import mock
22-
from osc_lib import utils as common_utils
22+
from osc_lib.cli import format_columns
2323
import warlock
2424

2525
from openstackclient.tests.unit import fakes
@@ -48,7 +48,7 @@
4848
IMAGE_data = tuple((IMAGE[x] for x in sorted(IMAGE)))
4949

5050
IMAGE_SHOW = copy.copy(IMAGE)
51-
IMAGE_SHOW['tags'] = ''
51+
IMAGE_SHOW['tags'] = format_columns.ListColumn(IMAGE_SHOW['tags'])
5252
IMAGE_SHOW_data = tuple((IMAGE_SHOW[x] for x in sorted(IMAGE_SHOW)))
5353

5454
# Just enough v2 schema to do some testing
@@ -281,7 +281,7 @@ def get_image_data(image=None):
281281
if x == 'tags':
282282
# The 'tags' should be format_list
283283
data_list.append(
284-
common_utils.format_list(getattr(image, x)))
284+
format_columns.ListColumn(getattr(image, x)))
285285
else:
286286
data_list.append(getattr(image, x))
287287
return tuple(data_list)

0 commit comments

Comments
 (0)