Add get_osc_show_columns_for_sdk_resource function

Move get_osc_show_columns_for_sdk_resource function, which is currently
present in OSC (network and future image) here, to allow usage in separate
plugins.

Change-Id: Ib63cdb49caa639adb92d998053aae8a07da731cb
This commit is contained in:
Artem Goncharov 2019-12-13 12:11:37 +01:00 committed by Artem Goncharov
parent e61311a2d7
commit 29a0c5a570
3 changed files with 97 additions and 0 deletions

View File

@ -843,3 +843,48 @@ class TestAssertItemEqual(test_utils.TestCommand):
format_columns.ListColumn(['x', 'y', 'z'])]
]
self.assertListItemEqual(expected, actual)
class TestSDKUtils(test_utils.TestCase):
def setUp(self):
super(TestSDKUtils, self).setUp()
def _test_get_osc_show_columns_for_sdk_resource(
self, sdk_resource, column_map,
expected_display_columns, expected_attr_columns):
display_columns, attr_columns = \
utils.get_osc_show_columns_for_sdk_resource(
sdk_resource, column_map)
self.assertEqual(expected_display_columns, display_columns)
self.assertEqual(expected_attr_columns, attr_columns)
def test_get_osc_show_columns_for_sdk_resource_empty(self):
self._test_get_osc_show_columns_for_sdk_resource(
{}, {}, tuple(), tuple())
def test_get_osc_show_columns_for_sdk_resource_empty_map(self):
self._test_get_osc_show_columns_for_sdk_resource(
{'foo': 'foo1'}, {},
('foo',), ('foo',))
def test_get_osc_show_columns_for_sdk_resource_empty_data(self):
self._test_get_osc_show_columns_for_sdk_resource(
{}, {'foo': 'foo_map'},
('foo_map',), ('foo_map',))
def test_get_osc_show_columns_for_sdk_resource_map(self):
self._test_get_osc_show_columns_for_sdk_resource(
{'foo': 'foo1'}, {'foo': 'foo_map'},
('foo_map',), ('foo',))
def test_get_osc_show_columns_for_sdk_resource_map_dup(self):
self._test_get_osc_show_columns_for_sdk_resource(
{'foo': 'foo1', 'foo_map': 'foo1'}, {'foo': 'foo_map'},
('foo_map',), ('foo',))
def test_get_osc_show_columns_for_sdk_resource_map_full(self):
self._test_get_osc_show_columns_for_sdk_resource(
{'foo': 'foo1', 'bar': 'bar1'},
{'foo': 'foo_map', 'new': 'bar'},
('bar', 'foo_map'), ('bar', 'foo'))

View File

@ -713,3 +713,50 @@ def wait_for_status(status_f,
callback(progress)
time.sleep(sleep_time)
return retval
def get_osc_show_columns_for_sdk_resource(
sdk_resource,
osc_column_map,
invisible_columns=None
):
"""Get and filter the display and attribute columns for an SDK resource.
Common utility function for preparing the output of an OSC show command.
Some of the columns may need to get renamed, others made invisible.
:param sdk_resource: An SDK resource
:param osc_column_map: A hash of mappings for display column names
:param invisible_columns: A list of invisible column names
:returns: Two tuples containing the names of the display and attribute
columns
"""
if getattr(sdk_resource, 'allow_get', None) is not None:
resource_dict = sdk_resource.to_dict(
body=True, headers=False, ignore_none=False)
else:
resource_dict = sdk_resource
# Build the OSC column names to display for the SDK resource.
attr_map = {}
display_columns = list(resource_dict.keys())
invisible_columns = [] if invisible_columns is None else invisible_columns
for col_name in invisible_columns:
if col_name in display_columns:
display_columns.remove(col_name)
for sdk_attr, osc_attr in osc_column_map.items():
if sdk_attr in display_columns:
attr_map[osc_attr] = sdk_attr
display_columns.remove(sdk_attr)
if osc_attr not in display_columns:
display_columns.append(osc_attr)
sorted_display_columns = sorted(display_columns)
# Build the SDK attribute names for the OSC column names.
attr_columns = []
for column in sorted_display_columns:
new_column = attr_map[column] if column in attr_map else column
attr_columns.append(new_column)
return tuple(sorted_display_columns), tuple(attr_columns)

View File

@ -0,0 +1,5 @@
---
features:
- |
Integrate get_osc_show_columns_for_sdk_resource function to ease showing
SDK resources.