summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhouhenglc <zhouhenglc@inspur.com>2019-09-25 15:47:15 +0800
committerzhouhenglc <zhouhenglc@inspur.com>2019-09-25 18:16:17 +0800
commit528f4e05efda40d89e14a543dfd3199eda8936c3 (patch)
treee8a2b4b58cf9e7f556ec7d8d750f5fee77cf3e7c
parent23f6a79aef1303d25f8eb1c9d5090fe7f4326d46 (diff)
downloaddesignate-528f4e05efda40d89e14a543dfd3199eda8936c3.tar.gz
fix call obj_reset_changes with recursive=True raise error
when call obj_reset_changes with recursive=True, the function raise: ERROR oslo_messaging.rpc.server AttributeError: 'list' object has no attribute 'ObjectField' Change-Id: I9559a80190eb44475452aac4e3553f921311723b
-rw-r--r--designate/objects/base.py6
-rw-r--r--designate/tests/unit/objects/test_base.py15
2 files changed, 19 insertions, 2 deletions
diff --git a/designate/objects/base.py b/designate/objects/base.py
index de7fa822..2ed893c5 100644
--- a/designate/objects/base.py
+++ b/designate/objects/base.py
@@ -18,6 +18,8 @@ from oslo_versionedobjects import exception
from oslo_utils import excutils
from designate.i18n import _
from oslo_versionedobjects import base
+from oslo_versionedobjects import fields as ovoo_fields
+
from oslo_versionedobjects.base import VersionedObjectDictCompat as DictObjectMixin # noqa
from designate.objects import fields
@@ -226,10 +228,10 @@ class DesignateObject(base.VersionedObject):
continue
# Reset straight Object and ListOfObjects fields
- if isinstance(self.fields[field], self.obj_fields.ObjectField):
+ if isinstance(self.fields[field], ovoo_fields.ObjectField):
value.obj_reset_changes(recursive=True)
elif isinstance(self.fields[field],
- self.obj_fields.ListOfObjectsField):
+ ovoo_fields.ListOfObjectsField):
for thing in value:
thing.obj_reset_changes(recursive=True)
diff --git a/designate/tests/unit/objects/test_base.py b/designate/tests/unit/objects/test_base.py
index 15b913d9..3b3fa23e 100644
--- a/designate/tests/unit/objects/test_base.py
+++ b/designate/tests/unit/objects/test_base.py
@@ -405,6 +405,21 @@ class DesignateObjectTest(oslotest.base.BaseTestCase):
self.assertEqual(1, len(obj.obj_what_changed()))
self.assertEqual({'name': "My Name"}, obj.obj_get_changes())
+ def test_obj_reset_changes_recursive(self):
+ obj = TestObject()
+ obj.id = "My ID"
+ obj.name = "My Name"
+ obj.nested = TestObject()
+ obj.nested.id = "My ID"
+
+ self.assertEqual(3, len(obj.obj_what_changed()))
+
+ obj.obj_reset_changes()
+ self.assertEqual(1, len(obj.obj_what_changed()))
+
+ obj.obj_reset_changes(recursive=True)
+ self.assertEqual(0, len(obj.obj_what_changed()))
+
def test_obj_get_original_value(self):
# Create an object
obj = TestObject()