fix for serializing IntFlag types

This commit is contained in:
0xDEADFED5 2025-01-03 22:04:38 -08:00
parent 284fb68553
commit c21ec0165d
2 changed files with 11 additions and 0 deletions

View file

@ -35,6 +35,7 @@ from django.utils.safestring import SafeString
import evennia
from evennia.utils import logger
from evennia.utils.utils import is_iter, to_bytes, uses_database
from enum import IntFlag
__all__ = ("to_pickle", "from_pickle", "do_pickle", "do_unpickle", "dbserialize", "dbunserialize")
@ -672,6 +673,8 @@ def to_pickle(data):
if dtype in (str, int, float, bool, bytes, SafeString):
return item
elif isinstance(item, IntFlag):
return item.value
elif dtype == tuple:
return tuple(process_item(val) for val in item)
elif dtype in (list, _SaverList):

View file

@ -9,6 +9,7 @@ from parameterized import parameterized
from evennia.objects.objects import DefaultObject
from evennia.utils import dbserialize
from enum import IntFlag, auto
class TestDbSerialize(TestCase):
@ -20,6 +21,13 @@ class TestDbSerialize(TestCase):
self.obj = DefaultObject(db_key="Tester")
self.obj.save()
def test_intflag(self):
class TestFlag(IntFlag):
foo = auto()
self.obj.db.test = TestFlag.foo
self.assertEqual(self.obj.db.test, TestFlag.foo)
self.obj.save()
def test_constants(self):
self.obj.db.test = 1
self.obj.db.test += 1