Merge "object: serialize set to list"

This commit is contained in:
Jenkins
2015-02-02 18:27:52 +00:00
committed by Gerrit Code Review
2 changed files with 10 additions and 4 deletions

View File

@@ -783,11 +783,13 @@ class NovaObjectSerializer(messaging.NoOpSerializer):
return iterable(**{k: action_fn(context, v) return iterable(**{k: action_fn(context, v)
for k, v in six.iteritems(values)}) for k, v in six.iteritems(values)})
else: else:
# NOTE(danms): A set can't have an unhashable value inside, such as # NOTE(danms, gibi) A set can't have an unhashable value inside,
# a dict. Convert sets to tuples, which is fine, since we can't # such as a dict. Convert the set to list, which is fine, since we
# send them over RPC anyway. # can't send them over RPC anyway. We convert it to list as this
# way there will be no semantic change between the fake rpc driver
# used in functional test and a normal rpc driver.
if iterable == set: if iterable == set:
iterable = tuple iterable = list
return iterable([action_fn(context, value) for value in values]) return iterable([action_fn(context, value) for value in values])
def serialize_entity(self, context, entity): def serialize_entity(self, context, entity):

View File

@@ -1013,6 +1013,10 @@ class TestObjectSerializer(_BaseTestCase):
for thing in (1, 'foo', [1, 2], {'foo': 'bar'}): for thing in (1, 'foo', [1, 2], {'foo': 'bar'}):
self.assertEqual(thing, ser.deserialize_entity(None, thing)) self.assertEqual(thing, ser.deserialize_entity(None, thing))
def test_serialize_set_to_list(self):
ser = base.NovaObjectSerializer()
self.assertEqual([1, 2], ser.serialize_entity(None, set([1, 2])))
def _test_deserialize_entity_newer(self, obj_version, backported_to, def _test_deserialize_entity_newer(self, obj_version, backported_to,
my_version='1.6'): my_version='1.6'):
ser = base.NovaObjectSerializer() ser = base.NovaObjectSerializer()