Merge branch 'develop' of https://github.com/owllex/evennia into owllex-develop

This commit is contained in:
Griatch 2022-02-12 14:15:25 +01:00
commit cab8f0eb2b
2 changed files with 30 additions and 0 deletions

View file

@ -243,6 +243,10 @@ class _SaverMutable(object):
def __delitem__(self, key):
self._data.__delitem__(key)
def deserialize(self):
"""Deserializes this mutable into its corresponding non-Saver type."""
return deserialize(self)
class _SaverList(_SaverMutable, MutableSequence):
"""
@ -418,6 +422,8 @@ def deserialize(obj):
tname = typ.__name__
if tname in ("_SaverDict", "dict"):
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:
return _DESERIALIZE_MAPPING[tname](_iter(val) for val in obj)
elif is_iter(obj):

View file

@ -2,9 +2,11 @@
Tests for dbserialize module
"""
from collections import deque
from django.test import TestCase
from evennia.utils import dbserialize
from evennia.objects.objects import DefaultObject
from parameterized import parameterized
class TestDbSerialize(TestCase):
@ -64,3 +66,25 @@ class TestDbSerialize(TestCase):
self.obj.db.test = {"a": True}
self.obj.db.test.update({"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)