diff --git a/linode_api4/objects/base.py b/linode_api4/objects/base.py index 45d18e4aa..abee4cdaa 100644 --- a/linode_api4/objects/base.py +++ b/linode_api4/objects/base.py @@ -124,7 +124,7 @@ def dict(self): result[k] = [ ( item.dict - if isinstance(item, cls) + if isinstance(item, (cls, JSONObject)) else ( self._flatten_base_subclass(item) if isinstance(item, Base) @@ -135,6 +135,8 @@ def dict(self): ] elif isinstance(v, Base): result[k] = self._flatten_base_subclass(v) + elif isinstance(v, JSONObject): + result[k] = v.dict return result diff --git a/test/unit/objects/mapped_object_test.py b/test/unit/objects/mapped_object_test.py index 2d83008ae..ac2448a4a 100644 --- a/test/unit/objects/mapped_object_test.py +++ b/test/unit/objects/mapped_object_test.py @@ -1,6 +1,7 @@ +from dataclasses import dataclass from test.unit.base import ClientBaseCase -from linode_api4.objects import Base, MappedObject, Property +from linode_api4.objects import Base, JSONObject, MappedObject, Property class MappedObjectCase(ClientBaseCase): @@ -20,7 +21,7 @@ def test_mapped_object_dict(self): mapped_obj = MappedObject(**test_dict) self.assertEqual(mapped_obj.dict, test_dict) - def test_mapped_object_dict(self): + def test_serialize_base_objects(self): test_property_name = "bar" test_property_value = "bar" @@ -42,3 +43,22 @@ class Foo(Base): mapped_obj = MappedObject(foo=foo) self.assertEqual(mapped_obj.dict, expected_dict) + + def test_serialize_json_objects(self): + test_property_name = "bar" + test_property_value = "bar" + + @dataclass + class Foo(JSONObject): + bar: str = "" + + foo = Foo.from_json({test_property_name: test_property_value}) + + expected_dict = { + "foo": { + test_property_name: test_property_value, + } + } + + mapped_obj = MappedObject(foo=foo) + self.assertEqual(mapped_obj.dict, expected_dict)