From f730a5e9a9bbf7aefc193279d48d4352237615e6 Mon Sep 17 00:00:00 2001 From: Boden R Date: Tue, 6 Nov 2018 09:49:10 -0700 Subject: [PATCH] rehome get_updatable_fields into object utils This patch rehomes the get_updatable_fields function from neutron.objects.base into neutron-lib. A unit test and release note is also included. Change-Id: I781607ca88626ac6e75b3df53ccee33f61c22fdf --- neutron_lib/objects/utils.py | 8 ++++++ neutron_lib/tests/unit/objects/test_utils.py | 25 ++++++++++++++++--- ...get-updatable-fields-82fd87d402d63ca2.yaml | 4 +++ 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/rehome-get-updatable-fields-82fd87d402d63ca2.yaml diff --git a/neutron_lib/objects/utils.py b/neutron_lib/objects/utils.py index 11c4599e5..92dd31dfc 100644 --- a/neutron_lib/objects/utils.py +++ b/neutron_lib/objects/utils.py @@ -98,3 +98,11 @@ class NotEqual(FilterObj): def filter(self, column): return column != self.value + + +def get_updatable_fields(cls, fields): + fields = fields.copy() + for field in cls.fields_no_update: + if field in fields: + del fields[field] + return fields diff --git a/neutron_lib/tests/unit/objects/test_utils.py b/neutron_lib/tests/unit/objects/test_utils.py index 7464dd1bd..ef15fa51c 100644 --- a/neutron_lib/tests/unit/objects/test_utils.py +++ b/neutron_lib/tests/unit/objects/test_utils.py @@ -10,6 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import mock + from neutron_lib.objects import utils as obj_utils from neutron_lib.tests import _base as base @@ -31,13 +33,15 @@ class TestUtils(base.BaseTestCase): filter_obj = obj_utils.NotIn([1, 2, 3]) fake_column = FakeColumn([1, 2, 4, 5]) - self.assertEqual([4, 5], filter_obj.filter(fake_column)) + self.assertEqual([4, 5], + sorted(filter_obj.filter(fake_column))) fake_column = FakeColumn([1, 2]) self.assertEqual([], filter_obj.filter(fake_column)) fake_column = FakeColumn([4, 5]) - self.assertEqual([4, 5], filter_obj.filter(fake_column)) + self.assertEqual([4, 5], + sorted(filter_obj.filter(fake_column))) def test_get_objects_with_filters_not_equal(self): @@ -50,10 +54,23 @@ class TestUtils(base.BaseTestCase): filter_obj = obj_utils.NotEqual(1) fake_column = FakeColumn([1, 2, 4, 5]) - self.assertEqual([2, 4, 5], filter_obj.filter(fake_column)) + self.assertEqual([2, 4, 5], + sorted(filter_obj.filter(fake_column))) fake_column = FakeColumn([1]) self.assertEqual([], filter_obj.filter(fake_column)) fake_column = FakeColumn([4, 5]) - self.assertEqual([4, 5], filter_obj.filter(fake_column)) + self.assertEqual([4, 5], + sorted(filter_obj.filter(fake_column))) + + def test_get_updatable_fields(self): + mock_class = mock.Mock() + mock_class.fields_no_update = [0, 2, 6] + + mock_fields = mock.Mock() + mock_fields.copy.return_value = {k: k for k in range(7)} + + updatable = obj_utils.get_updatable_fields(mock_class, mock_fields) + self.assertEqual([1, 3, 4, 5], + sorted(list(updatable.keys()))) diff --git a/releasenotes/notes/rehome-get-updatable-fields-82fd87d402d63ca2.yaml b/releasenotes/notes/rehome-get-updatable-fields-82fd87d402d63ca2.yaml new file mode 100644 index 000000000..25e863621 --- /dev/null +++ b/releasenotes/notes/rehome-get-updatable-fields-82fd87d402d63ca2.yaml @@ -0,0 +1,4 @@ +--- +features: + - The ``get_updatable_fields`` function from ``neutron.objects.base`` is now + available in ``neutron_lib.object.utils``.