diff --git a/swh/core/api/serializers.py b/swh/core/api/serializers.py --- a/swh/core/api/serializers.py +++ b/swh/core/api/serializers.py @@ -208,8 +208,13 @@ return obj try: - return msgpack.unpackb(data, raw=False, - object_hook=decode_types) + try: + return msgpack.unpackb(data, raw=False, + object_hook=decode_types, + strict_map_key=False) + except TypeError: # msgpack < 0.6.0 + return msgpack.unpackb(data, raw=False, + object_hook=decode_types) except TypeError: # msgpack < 0.5.2 return msgpack.unpackb(data, encoding='utf-8', object_hook=decode_types) diff --git a/swh/core/api/tests/test_serializers.py b/swh/core/api/tests/test_serializers.py --- a/swh/core/api/tests/test_serializers.py +++ b/swh/core/api/tests/test_serializers.py @@ -106,8 +106,12 @@ self.assertEqual(self.encoded_data, json.loads(data)) def test_round_trip_msgpack(self): - data = msgpack_dumps(self.data) - self.assertEqual(self.data, msgpack_loads(data)) + original_data = { + **self.data, + 'none_dict_key': {None: 42}, + } + data = msgpack_dumps(original_data) + self.assertEqual(original_data, msgpack_loads(data)) def test_round_trip_msgpack_extra_types(self): original_data = [ExtraType('baz', self.data), 'qux']