diff --git a/oslo_versionedobjects/base.py b/oslo_versionedobjects/base.py index bac460b3..2d89a7f2 100644 --- a/oslo_versionedobjects/base.py +++ b/oslo_versionedobjects/base.py @@ -664,6 +664,10 @@ class VersionedObject(object): def obj_fields(self): return list(self.fields.keys()) + self.obj_extra_fields + @property + def obj_context(self): + return self._context + class ComparableVersionedObject(object): """Mix-in to provide comparison methods diff --git a/oslo_versionedobjects/tests/test_objects.py b/oslo_versionedobjects/tests/test_objects.py index 993e2a5d..b5a40e1c 100644 --- a/oslo_versionedobjects/tests/test_objects.py +++ b/oslo_versionedobjects/tests/test_objects.py @@ -1083,6 +1083,21 @@ class _TestObject(object): obj = TestObj() self.assertEqual(['foo', 'bar'], obj.obj_fields) + def test_obj_context(self): + class TestObj(base.VersionedObject): + pass + + # context is available through the public property + context = mock.Mock() + obj = TestObj(context) + self.assertEqual(context, obj.obj_context) + + # ..but it's not available for update + new_context = mock.Mock() + self.assertRaises( + AttributeError, + setattr, obj, 'obj_context', new_context) + def test_obj_constructor(self): obj = MyObj(context=self.context, foo=123, bar='abc') self.assertEqual(123, obj.foo)