Skip to content

Commit f8b4efd

Browse files
author
Kevin Hellemun
committed
Added special adapter for Anchored objects. (#42)
1 parent d68c28a commit f8b4efd

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

bunq/sdk/json/adapters.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,68 @@
88
from bunq.sdk.model import core
99
from bunq.sdk.model.generated import endpoint
1010
from bunq.sdk.model.generated import object_
11+
from bunq.sdk.exception import BunqException
12+
13+
14+
class AnchoredObjectModelAdapter(converter.JsonAdapter):
15+
16+
_override_field_map = {
17+
'ScheduledPayment': 'SchedulePayment',
18+
'ScheduledInstance': 'ScheduleInstance',
19+
}
20+
21+
@classmethod
22+
def deserialize(cls, cls_target, obj_raw):
23+
"""
24+
:type cls_target: core.BunqModel
25+
:type obj_raw: int|str|bool|float|list|dict|None
26+
27+
:rtype: T
28+
"""
29+
30+
model_ = super()._deserialize_default(cls_target, obj_raw)
31+
32+
if isinstance(model_, core.AnchoredObjectInterface) and model_.are_all_fields_none():
33+
for field in model_.__dict__:
34+
field_ = None
35+
if field in cls._override_field_map:
36+
field_ = cls._override_field_map[field]
37+
38+
if field_ is None:
39+
object_class = cls._get_object_class(field)
40+
else:
41+
object_class = cls._get_object_class(field_)
42+
43+
contents = super()._deserialize_default(object_class, obj_raw)
44+
45+
if contents.are_all_fields_none():
46+
setattr(model_, field, None)
47+
else:
48+
setattr(model_, field, contents)
49+
50+
return model_
51+
52+
@classmethod
53+
def can_serialize(cls):
54+
return False
55+
56+
@staticmethod
57+
def _get_object_class(class_name):
58+
"""
59+
:type class_name: str
60+
:rtype: core.BunqModel
61+
"""
62+
63+
try:
64+
return getattr(endpoint, class_name)
65+
except AttributeError:
66+
pass
67+
68+
try:
69+
return getattr(object_, class_name)
70+
except AttributeError:
71+
pass
72+
1173

1274

1375
class InstallationAdapter(converter.JsonAdapter):

0 commit comments

Comments
 (0)