Merge "Make the hash of a defaulted set field stable"
This commit is contained in:
commit
85e4fcabe1
@ -144,8 +144,14 @@ class Field(object):
|
|||||||
self._read_only = read_only
|
self._read_only = read_only
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
|
if isinstance(self._default, set):
|
||||||
|
# make a py27 and py35 compatible representation. See bug 1771804
|
||||||
|
default = 'set([%s])' % ','.join(sorted([six.text_type(v)
|
||||||
|
for v in self._default]))
|
||||||
|
else:
|
||||||
|
default = str(self._default)
|
||||||
return '%s(default=%s,nullable=%s)' % (self._type.__class__.__name__,
|
return '%s(default=%s,nullable=%s)' % (self._type.__class__.__name__,
|
||||||
self._default, self._nullable)
|
default, self._nullable)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def nullable(self):
|
def nullable(self):
|
||||||
|
@ -813,6 +813,15 @@ class TestSetOfIntegers(TestField):
|
|||||||
def test_stringify(self):
|
def test_stringify(self):
|
||||||
self.assertEqual('set([1,2])', self.field.stringify(set([1, 2])))
|
self.assertEqual('set([1,2])', self.field.stringify(set([1, 2])))
|
||||||
|
|
||||||
|
def test_repr(self):
|
||||||
|
self.assertEqual("Set(default=<class 'oslo_versionedobjects.fields."
|
||||||
|
"UnspecifiedDefault'>,nullable=False)",
|
||||||
|
repr(self.field))
|
||||||
|
self.assertEqual("Set(default=set([]),nullable=False)",
|
||||||
|
repr(fields.SetOfIntegersField(default=set())))
|
||||||
|
self.assertEqual("Set(default=set([1,a]),nullable=False)",
|
||||||
|
repr(fields.SetOfIntegersField(default={1, 'a'})))
|
||||||
|
|
||||||
|
|
||||||
class TestListOfSetsOfIntegers(TestField):
|
class TestListOfSetsOfIntegers(TestField):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -601,6 +601,20 @@ class TestObjectVersionChecker(test.TestCase):
|
|||||||
self.assertEqual(expected_fp, fp, "_get_fingerprint() did not "
|
self.assertEqual(expected_fp, fp, "_get_fingerprint() did not "
|
||||||
"generate a correct fingerprint.")
|
"generate a correct fingerprint.")
|
||||||
|
|
||||||
|
def test_get_fingerprint_with_defaulted_set(self):
|
||||||
|
class ClassWithDefaultedSetField(base.VersionedObject):
|
||||||
|
VERSION = 1.0
|
||||||
|
fields = {
|
||||||
|
'empty_default': fields.SetOfIntegersField(default=set()),
|
||||||
|
'non_empty_default': fields.SetOfIntegersField(default={1, 2})
|
||||||
|
}
|
||||||
|
self._add_class(self.obj_classes, ClassWithDefaultedSetField)
|
||||||
|
|
||||||
|
# it is expected that this hash is stable across python versions
|
||||||
|
expected = '1.0-bcc44920f2f727eca463c6eb4fe8445b'
|
||||||
|
actual = self.ovc._get_fingerprint(ClassWithDefaultedSetField.__name__)
|
||||||
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
def test_get_dependencies(self):
|
def test_get_dependencies(self):
|
||||||
# Make sure _get_dependencies() generates a correct tree when parsing
|
# Make sure _get_dependencies() generates a correct tree when parsing
|
||||||
# an object
|
# an object
|
||||||
|
Loading…
Reference in New Issue
Block a user