X Tutup
Skip to content

Commit 29a0c5a

Browse files
committed
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
1 parent e61311a commit 29a0c5a

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed

osc_lib/tests/utils/test_utils.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,3 +843,48 @@ def test_assert_list_item(self):
843843
format_columns.ListColumn(['x', 'y', 'z'])]
844844
]
845845
self.assertListItemEqual(expected, actual)
846+
847+
848+
class TestSDKUtils(test_utils.TestCase):
849+
850+
def setUp(self):
851+
super(TestSDKUtils, self).setUp()
852+
853+
def _test_get_osc_show_columns_for_sdk_resource(
854+
self, sdk_resource, column_map,
855+
expected_display_columns, expected_attr_columns):
856+
display_columns, attr_columns = \
857+
utils.get_osc_show_columns_for_sdk_resource(
858+
sdk_resource, column_map)
859+
self.assertEqual(expected_display_columns, display_columns)
860+
self.assertEqual(expected_attr_columns, attr_columns)
861+
862+
def test_get_osc_show_columns_for_sdk_resource_empty(self):
863+
self._test_get_osc_show_columns_for_sdk_resource(
864+
{}, {}, tuple(), tuple())
865+
866+
def test_get_osc_show_columns_for_sdk_resource_empty_map(self):
867+
self._test_get_osc_show_columns_for_sdk_resource(
868+
{'foo': 'foo1'}, {},
869+
('foo',), ('foo',))
870+
871+
def test_get_osc_show_columns_for_sdk_resource_empty_data(self):
872+
self._test_get_osc_show_columns_for_sdk_resource(
873+
{}, {'foo': 'foo_map'},
874+
('foo_map',), ('foo_map',))
875+
876+
def test_get_osc_show_columns_for_sdk_resource_map(self):
877+
self._test_get_osc_show_columns_for_sdk_resource(
878+
{'foo': 'foo1'}, {'foo': 'foo_map'},
879+
('foo_map',), ('foo',))
880+
881+
def test_get_osc_show_columns_for_sdk_resource_map_dup(self):
882+
self._test_get_osc_show_columns_for_sdk_resource(
883+
{'foo': 'foo1', 'foo_map': 'foo1'}, {'foo': 'foo_map'},
884+
('foo_map',), ('foo',))
885+
886+
def test_get_osc_show_columns_for_sdk_resource_map_full(self):
887+
self._test_get_osc_show_columns_for_sdk_resource(
888+
{'foo': 'foo1', 'bar': 'bar1'},
889+
{'foo': 'foo_map', 'new': 'bar'},
890+
('bar', 'foo_map'), ('bar', 'foo'))

osc_lib/utils/__init__.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,3 +713,50 @@ def wait_for_status(status_f,
713713
callback(progress)
714714
time.sleep(sleep_time)
715715
return retval
716+
717+
718+
def get_osc_show_columns_for_sdk_resource(
719+
sdk_resource,
720+
osc_column_map,
721+
invisible_columns=None
722+
):
723+
"""Get and filter the display and attribute columns for an SDK resource.
724+
725+
Common utility function for preparing the output of an OSC show command.
726+
Some of the columns may need to get renamed, others made invisible.
727+
728+
:param sdk_resource: An SDK resource
729+
:param osc_column_map: A hash of mappings for display column names
730+
:param invisible_columns: A list of invisible column names
731+
732+
:returns: Two tuples containing the names of the display and attribute
733+
columns
734+
"""
735+
736+
if getattr(sdk_resource, 'allow_get', None) is not None:
737+
resource_dict = sdk_resource.to_dict(
738+
body=True, headers=False, ignore_none=False)
739+
else:
740+
resource_dict = sdk_resource
741+
742+
# Build the OSC column names to display for the SDK resource.
743+
attr_map = {}
744+
display_columns = list(resource_dict.keys())
745+
invisible_columns = [] if invisible_columns is None else invisible_columns
746+
for col_name in invisible_columns:
747+
if col_name in display_columns:
748+
display_columns.remove(col_name)
749+
for sdk_attr, osc_attr in osc_column_map.items():
750+
if sdk_attr in display_columns:
751+
attr_map[osc_attr] = sdk_attr
752+
display_columns.remove(sdk_attr)
753+
if osc_attr not in display_columns:
754+
display_columns.append(osc_attr)
755+
sorted_display_columns = sorted(display_columns)
756+
757+
# Build the SDK attribute names for the OSC column names.
758+
attr_columns = []
759+
for column in sorted_display_columns:
760+
new_column = attr_map[column] if column in attr_map else column
761+
attr_columns.append(new_column)
762+
return tuple(sorted_display_columns), tuple(attr_columns)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Integrate get_osc_show_columns_for_sdk_resource function to ease showing
5+
SDK resources.

0 commit comments

Comments
 (0)
X Tutup