Merge pull request #3705 from 0xDEADFED5/main

fix for serializing IntFlag types
This commit is contained in:
Griatch 2025-01-18 12:02:45 +01:00 committed by GitHub
commit f227179631
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
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