@@ -108,6 +108,12 @@ class SomeEnum(str, Enum):
108108 FIELD_TWO = "two"
109109
110110
111+ @dataclass
112+ class NestedModelWithEnum :
113+ some_enum : SomeEnum
114+ some_str : str
115+
116+
111117@dataclass
112118class MyDerivedModel (MyBaseModel ):
113119 id : str
@@ -127,7 +133,12 @@ class MyDerivedModel(MyBaseModel):
127133 union_date : Union [datetime , None ] = field (default_factory = datetime .utcnow )
128134 bytes_type : Union [bytes , None ] = None
129135 bytearray_type : Union [bytearray , None ] = None
130- some_enum : SomeEnum = field (default_factory = lambda : SomeEnum .FIELD_ONE )
136+ some_enum : SomeEnum = SomeEnum .FIELD_ONE
137+ nested_enum : NestedModelWithEnum = field (
138+ default_factory = lambda : NestedModelWithEnum (
139+ some_str = "string" , some_enum = SomeEnum .FIELD_ONE
140+ )
141+ )
131142
132143 def get_key (self ) -> _MyModelKey :
133144 return _MyModelKey (my_pk = f"AA#{ self .id } " , my_sk = self .sk_field or "#" )
@@ -498,6 +509,8 @@ async def test_serialize_deserialize_model(store: MyModelStore):
498509
499510 assert isinstance (serialized ["some_enum" ], str )
500511 assert serialized ["some_enum" ] == "one"
512+ assert isinstance (serialized ["nested_enum" ], dict )
513+ assert serialized ["nested_enum" ]["some_enum" ] == "one"
501514
502515 assert model .none_string is None
503516 assert "none_thing" not in serialized
@@ -517,6 +530,23 @@ async def test_serialize_deserialize_model(store: MyModelStore):
517530 assert deserialized .today == model .today
518531 assert isinstance (deserialized .some_enum , SomeEnum )
519532 assert deserialized .some_enum == SomeEnum .FIELD_ONE
533+ assert isinstance (deserialized .nested_enum , NestedModelWithEnum )
534+ assert isinstance (deserialized .nested_enum .some_enum , SomeEnum )
535+ assert deserialized .nested_enum .some_enum == SomeEnum .FIELD_ONE
536+
537+
538+ async def test_nested_enum_using_deserialise_model_function ():
539+ enum_test_dict = {
540+ "some_str" : "test string" ,
541+ "some_enum" : "two" ,
542+ }
543+
544+ deserialised_model = BaseModelStore .deserialise_model (enum_test_dict , NestedModelWithEnum )
545+
546+ assert isinstance (deserialised_model , NestedModelWithEnum )
547+ assert isinstance (deserialised_model .some_enum , SomeEnum )
548+ assert deserialised_model .some_enum == SomeEnum .FIELD_TWO
549+ assert deserialised_model .some_str == "test string"
520550
521551
522552async def test_transact_get_put_model (store : MyModelStore ):
0 commit comments