Skip to content

Commit 7f2ac9c

Browse files
authored
Merge pull request #91 from bunq/fix_supperfouls_fields_error_bunq/sdk_python#77
Fix supperfouls fields error #77
2 parents f6aca9f + a5352cc commit 7f2ac9c

File tree

8 files changed

+6511
-2408
lines changed

8 files changed

+6511
-2408
lines changed

bunq/sdk/json/adapters.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@
44
from bunq.sdk import client
55
from bunq.sdk import context
66
from bunq.sdk import security
7+
from bunq.sdk.exception import BunqException
78
from bunq.sdk.json import converter
89
from bunq.sdk.model import core
910
from bunq.sdk.model.generated import endpoint
1011
from bunq.sdk.model.generated import object_
11-
from bunq.sdk.exception import BunqException
1212

1313

1414
class AnchoredObjectModelAdapter(converter.JsonAdapter):
15-
1615
_ERROR_MODEL_NOT_FOUND = '{} is not in endpoint nor object.'
1716

17+
__STRING_FORMAT_UNDERSCORE = '_'
18+
1819
_override_field_map = {
1920
'ScheduledPayment': 'SchedulePayment',
2021
'ScheduledInstance': 'ScheduleInstance',
21-
}
22+
}
2223

2324
@classmethod
2425
def deserialize(cls, cls_target, obj_raw):
@@ -31,17 +32,12 @@ def deserialize(cls, cls_target, obj_raw):
3132

3233
model_ = super()._deserialize_default(cls_target, obj_raw)
3334

34-
if isinstance(model_, core.AnchoredObjectInterface) and model_.is_all_field_none():
35+
if isinstance(
36+
model_,
37+
core.AnchoredObjectInterface
38+
) and model_.is_all_field_none():
3539
for field in model_.__dict__:
36-
field_ = None
37-
if field in cls._override_field_map:
38-
field_ = cls._override_field_map[field]
39-
40-
if field_ is None:
41-
object_class = cls._get_object_class(field)
42-
else:
43-
object_class = cls._get_object_class(field_)
44-
40+
object_class = cls._get_object_class(field)
4541
contents = super()._deserialize_default(object_class, obj_raw)
4642

4743
if contents.is_all_field_none():
@@ -62,6 +58,11 @@ def _get_object_class(cls, class_name):
6258
:rtype: core.BunqModel
6359
"""
6460

61+
class_name = class_name.lstrip(cls.__STRING_FORMAT_UNDERSCORE)
62+
63+
if class_name in cls._override_field_map:
64+
class_name = cls._override_field_map[class_name]
65+
6566
try:
6667
return getattr(endpoint, class_name)
6768
except AttributeError:
@@ -486,10 +487,12 @@ def serialize(cls, share_detail):
486487
"""
487488

488489
return {
489-
cls._FIELD_PAYMENT: converter.serialize(share_detail.payment),
490-
cls._FIELD_READ_ONLY: converter.serialize(share_detail.read_only),
490+
cls._FIELD_PAYMENT: converter.serialize(
491+
share_detail._payment_field_for_request),
492+
cls._FIELD_READ_ONLY: converter.serialize(
493+
share_detail._read_only_field_for_request),
491494
cls._FIELD_DRAFT_PAYMENT: converter.serialize(
492-
share_detail.draft_payment
495+
share_detail._draft_payment
493496
),
494497
}
495498

@@ -621,4 +624,4 @@ def serialize(cls, pagination):
621624

622625
_ = pagination
623626

624-
raise NotImplementedError()
627+
raise NotImplementedError()

bunq/sdk/json/converter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ def _deserialize_dict(cls, cls_target, dict_):
184184
:rtype: T
185185
"""
186186

187-
instance = cls_target.__new__(cls_target, cls_target)
187+
instance = cls_target.__new__(cls_target)
188188
dict_deserialized = cls._deserialize_dict_attributes(cls_target, dict_)
189189
instance.__dict__ = cls._fill_default_values(cls_target,
190190
dict_deserialized)

bunq/sdk/model/core.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ class BunqModel(object):
1818
# The very first index of an array
1919
_INDEX_FIRST = 0
2020

21+
__STRING_FORMAT_EMPTY = ''
22+
__STRING_FORMAT_FIELD_FOR_REQUEST_ONE_UNDERSCORE = '_field_for_request'
23+
__STRING_FORMAT_FIELD_FOR_REQUEST_TWO_UNDERSCORE = '__field_for_request'
24+
2125
def is_all_field_none(self):
2226
raise NotImplementedError
2327

@@ -166,6 +170,16 @@ def _determine_monetary_account_id(cls, monetary_account_id=None):
166170

167171
return monetary_account_id
168172

173+
@classmethod
174+
def _remove_field_for_request(cls, json_str: str):
175+
return json_str.replace(
176+
cls.__STRING_FORMAT_FIELD_FOR_REQUEST_TWO_UNDERSCORE,
177+
cls.__STRING_FORMAT_EMPTY
178+
).replace(
179+
cls.__STRING_FORMAT_FIELD_FOR_REQUEST_ONE_UNDERSCORE,
180+
cls.__STRING_FORMAT_EMPTY
181+
)
182+
169183

170184
class Id(BunqModel):
171185
"""

0 commit comments

Comments
 (0)