Skip to content

Commit 09fbaeb

Browse files
author
Kevin Hellemun
committed
Merge branch 'fix_supperfouls_fields_error_bunq/sdk_python#77' into fix_monetary_account_joint_retrieval_bunq/sdk_python#52
# Conflicts: # bunq/sdk/model/generated/object_.py
2 parents c1b1fa7 + 355df00 commit 09fbaeb

File tree

6 files changed

+102
-37
lines changed

6 files changed

+102
-37
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
"""

tests/bunq_test.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class BunqSdkTestCase(unittest.TestCase):
3737

3838
__SPENDING_MONEY_AMOUNT = '500'
3939
__CURRENCY_EUR = 'EUR'
40-
__POINTER_EMAIL = 'EMAIL'
40+
_POINTER_EMAIL = 'EMAIL'
4141
__SPENDING_MONEY_RECIPIENT = '[email protected]'
4242
__REQUEST_SPENDING_DESCRIPTION = 'sdk python test, thanks daddy <3'
4343

@@ -46,7 +46,7 @@ class BunqSdkTestCase(unittest.TestCase):
4646

4747
__SECOND_MONETARY_ACCOUNT_DESCRIPTION = 'test account python'
4848

49-
__EMAIL_BRAVO = '[email protected]'
49+
_EMAIL_BRAVO = '[email protected]'
5050

5151
__TIME_OUT_AUTO_ACCEPT_SPENDING_MONEY = 0.5
5252

@@ -77,7 +77,7 @@ def __request_spending_money(self):
7777
endpoint.RequestInquiry.create(
7878
object_.Amount(self.__SPENDING_MONEY_AMOUNT, self.__CURRENCY_EUR),
7979
object_.Pointer(
80-
self.__POINTER_EMAIL,
80+
self._POINTER_EMAIL,
8181
self.__SPENDING_MONEY_RECIPIENT
8282
),
8383
self.__REQUEST_SPENDING_DESCRIPTION,
@@ -86,7 +86,7 @@ def __request_spending_money(self):
8686
endpoint.RequestInquiry.create(
8787
object_.Amount(self.__SPENDING_MONEY_AMOUNT, self.__CURRENCY_EUR),
8888
object_.Pointer(
89-
self.__POINTER_EMAIL,
89+
self._POINTER_EMAIL,
9090
self.__SPENDING_MONEY_RECIPIENT
9191
),
9292
self.__REQUEST_SPENDING_DESCRIPTION,
@@ -113,7 +113,7 @@ def _get_pointer_bravo(self):
113113
:rtype: object_.Pointer
114114
"""
115115

116-
return object_.Pointer(self.__POINTER_EMAIL, self.__EMAIL_BRAVO)
116+
return object_.Pointer(self._POINTER_EMAIL, self._EMAIL_BRAVO)
117117

118118
def _get_alias_second_account(self):
119119
"""

tests/model/generated/endpoint/test_payment.py

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
from bunq.sdk.model.generated.endpoint import ChatMessageText
2-
from bunq.sdk.model.generated.endpoint import Payment
3-
from bunq.sdk.model.generated.endpoint import PaymentChat
4-
from bunq.sdk.model.generated.object_ import Amount
1+
from typing import List
2+
3+
from bunq.sdk.model.generated import endpoint
4+
from bunq.sdk.model.generated import object_
55
from tests.bunq_test import BunqSdkTestCase
6-
from tests.config import Config
76

87

98
class TestPayment(BunqSdkTestCase):
@@ -18,7 +17,8 @@ class TestPayment(BunqSdkTestCase):
1817
_PAYMENT_CURRENCY = 'EUR'
1918
_PAYMENT_DESCRIPTION = 'Python unit test'
2019
_PAYMENT_CHAT_TEXT_MESSAGE = 'send from python test'
21-
_USER_ID = Config.get_user_id()
20+
21+
_MAXIMUM_PAYMENT_IN_BATCH = 10
2222

2323
def test_payment_to_other_user(self):
2424
"""
@@ -28,8 +28,8 @@ def test_payment_to_other_user(self):
2828
without errors
2929
"""
3030

31-
Payment.create(
32-
Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
31+
endpoint.Payment.create(
32+
object_.Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
3333
self._get_pointer_bravo(),
3434
self._PAYMENT_DESCRIPTION
3535
)
@@ -42,8 +42,8 @@ def test_payment_to_other_account(self):
4242
without errors
4343
"""
4444

45-
Payment.create(
46-
Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
45+
endpoint.Payment.create(
46+
object_.Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
4747
self._get_alias_second_account(),
4848
self._PAYMENT_DESCRIPTION
4949
)
@@ -56,12 +56,53 @@ def test_payment_chat(self):
5656
without errors
5757
"""
5858

59-
payment_id = Payment.create(
60-
Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
59+
payment_id = endpoint.Payment.create(
60+
object_.Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
6161
self._get_pointer_bravo(),
6262
self._PAYMENT_DESCRIPTION
6363
).value
6464

65-
chat_id = PaymentChat.create(payment_id).value
65+
chat_id = endpoint.PaymentChat.create(payment_id).value
66+
67+
endpoint.ChatMessageText.create(
68+
chat_id,
69+
self._PAYMENT_CHAT_TEXT_MESSAGE
70+
)
71+
72+
def test_payment_batch(self):
73+
"""
74+
"""
75+
76+
response_create: endpoint.BunqResponseInt = \
77+
endpoint.PaymentBatch.create(
78+
self.__create_payment_list()
79+
)
80+
81+
self.assertIsNotNone(response_create)
82+
83+
response_get: endpoint.BunqResponsePaymentBatch = \
84+
endpoint.PaymentBatch.get(response_create.value)
85+
86+
self.assertIsNotNone(response_get)
87+
self.assertFalse(response_get.value.is_all_field_none())
88+
89+
def __create_payment_list(self) -> List[endpoint.Payment]:
90+
"""
91+
:rtype: List[Payment]
92+
"""
93+
94+
all_payment: List[endpoint.Payment] = []
95+
96+
while len(all_payment) < self._MAXIMUM_PAYMENT_IN_BATCH:
97+
all_payment.append(
98+
endpoint.Payment(
99+
object_.Amount(
100+
self._PAYMENT_AMOUNT_EUR,
101+
self._PAYMENT_CURRENCY
102+
),
103+
object_.Pointer(self._POINTER_EMAIL, self._EMAIL_BRAVO),
104+
self._PAYMENT_DESCRIPTION
105+
)
106+
)
66107

67-
ChatMessageText.create(chat_id, self._PAYMENT_CHAT_TEXT_MESSAGE)
108+
return all_payment

tests/model/generated/object/test_notification_url.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ class TestNotificationUrl(bunq_test.BunqSdkTestCase):
6161
endpoint,
6262
]
6363

64+
@classmethod
65+
def setUpClass(cls):
66+
pass
67+
68+
def setUp(self):
69+
pass
70+
6471
# File mode constants.
6572
_FILE_MODE_READ = 'r'
6673

0 commit comments

Comments
 (0)