Add deserialize() shortcut on _SaverMutable.
Fix a bug in deserialize for _SavedOrderedDict as it uses non-standard initialization.
This commit is contained in:
parent
2c3b82ac4a
commit
f375bc923c
2 changed files with 30 additions and 0 deletions
|
|
@ -243,6 +243,10 @@ class _SaverMutable(object):
|
||||||
def __delitem__(self, key):
|
def __delitem__(self, key):
|
||||||
self._data.__delitem__(key)
|
self._data.__delitem__(key)
|
||||||
|
|
||||||
|
def deserialize(self):
|
||||||
|
"""Deserializes this mutable into its corresponding non-Saver type."""
|
||||||
|
return deserialize(self)
|
||||||
|
|
||||||
|
|
||||||
class _SaverList(_SaverMutable, MutableSequence):
|
class _SaverList(_SaverMutable, MutableSequence):
|
||||||
"""
|
"""
|
||||||
|
|
@ -418,6 +422,8 @@ def deserialize(obj):
|
||||||
tname = typ.__name__
|
tname = typ.__name__
|
||||||
if tname in ("_SaverDict", "dict"):
|
if tname in ("_SaverDict", "dict"):
|
||||||
return {_iter(key): _iter(val) for key, val in obj.items()}
|
return {_iter(key): _iter(val) for key, val in obj.items()}
|
||||||
|
elif tname in ("_SaverOrderedDict", "OrderedDict"):
|
||||||
|
return OrderedDict([(_iter(key), _iter(val)) for key, val in obj.items()])
|
||||||
elif tname in _DESERIALIZE_MAPPING:
|
elif tname in _DESERIALIZE_MAPPING:
|
||||||
return _DESERIALIZE_MAPPING[tname](_iter(val) for val in obj)
|
return _DESERIALIZE_MAPPING[tname](_iter(val) for val in obj)
|
||||||
elif is_iter(obj):
|
elif is_iter(obj):
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,11 @@
|
||||||
Tests for dbserialize module
|
Tests for dbserialize module
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from collections import deque
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from evennia.utils import dbserialize
|
from evennia.utils import dbserialize
|
||||||
from evennia.objects.objects import DefaultObject
|
from evennia.objects.objects import DefaultObject
|
||||||
|
from parameterized import parameterized
|
||||||
|
|
||||||
|
|
||||||
class TestDbSerialize(TestCase):
|
class TestDbSerialize(TestCase):
|
||||||
|
|
@ -64,3 +66,25 @@ class TestDbSerialize(TestCase):
|
||||||
self.obj.db.test = {"a": True}
|
self.obj.db.test = {"a": True}
|
||||||
self.obj.db.test.update({"b": False})
|
self.obj.db.test.update({"b": False})
|
||||||
self.assertEqual(self.obj.db.test, {"a": True, "b": False})
|
self.assertEqual(self.obj.db.test, {"a": True, "b": False})
|
||||||
|
|
||||||
|
@parameterized.expand(
|
||||||
|
[
|
||||||
|
("list", list, dbserialize._SaverList, [1, 2, 3]),
|
||||||
|
("dict", dict, dbserialize._SaverDict, {"key": "value"}),
|
||||||
|
("set", set, dbserialize._SaverSet, {1, 2, 3}),
|
||||||
|
("deque", deque, dbserialize._SaverDeque, deque(("a", "b", "c"))),
|
||||||
|
(
|
||||||
|
"OrderedDict",
|
||||||
|
dbserialize.OrderedDict,
|
||||||
|
dbserialize._SaverOrderedDict,
|
||||||
|
dbserialize.OrderedDict([("a", 1), ("b", 2), ("c", 3)]),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_deserialize(self, _, base_type, saver_type, default_value):
|
||||||
|
self.assertIsInstance(default_value, base_type)
|
||||||
|
self.obj.db.test = default_value
|
||||||
|
for value in (dbserialize.deserialize(self.obj.db.test), self.obj.db.test.deserialize()):
|
||||||
|
self.assertIsInstance(value, base_type)
|
||||||
|
self.assertNotIsInstance(value, saver_type)
|
||||||
|
self.assertEqual(value, default_value)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue