Skip to content

Commit b0920fd

Browse files
Serialize JSONObject in MappedObject (#399)
1 parent 9d4a6ee commit b0920fd

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

linode_api4/objects/base.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def dict(self):
124124
result[k] = [
125125
(
126126
item.dict
127-
if isinstance(item, cls)
127+
if isinstance(item, (cls, JSONObject))
128128
else (
129129
self._flatten_base_subclass(item)
130130
if isinstance(item, Base)
@@ -135,6 +135,8 @@ def dict(self):
135135
]
136136
elif isinstance(v, Base):
137137
result[k] = self._flatten_base_subclass(v)
138+
elif isinstance(v, JSONObject):
139+
result[k] = v.dict
138140

139141
return result
140142

test/unit/objects/mapped_object_test.py

+22-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
from dataclasses import dataclass
12
from test.unit.base import ClientBaseCase
23

3-
from linode_api4.objects import Base, MappedObject, Property
4+
from linode_api4.objects import Base, JSONObject, MappedObject, Property
45

56

67
class MappedObjectCase(ClientBaseCase):
@@ -20,7 +21,7 @@ def test_mapped_object_dict(self):
2021
mapped_obj = MappedObject(**test_dict)
2122
self.assertEqual(mapped_obj.dict, test_dict)
2223

23-
def test_mapped_object_dict(self):
24+
def test_serialize_base_objects(self):
2425
test_property_name = "bar"
2526
test_property_value = "bar"
2627

@@ -42,3 +43,22 @@ class Foo(Base):
4243

4344
mapped_obj = MappedObject(foo=foo)
4445
self.assertEqual(mapped_obj.dict, expected_dict)
46+
47+
def test_serialize_json_objects(self):
48+
test_property_name = "bar"
49+
test_property_value = "bar"
50+
51+
@dataclass
52+
class Foo(JSONObject):
53+
bar: str = ""
54+
55+
foo = Foo.from_json({test_property_name: test_property_value})
56+
57+
expected_dict = {
58+
"foo": {
59+
test_property_name: test_property_value,
60+
}
61+
}
62+
63+
mapped_obj = MappedObject(foo=foo)
64+
self.assertEqual(mapped_obj.dict, expected_dict)

0 commit comments

Comments
 (0)