Skip to content

Commit 1a7d4d9

Browse files
committed
feature/python-sdk-psd2: Added PaymentServiceProviderCredential to relevant classes.
1 parent 17d933d commit 1a7d4d9

File tree

4 files changed

+46
-8
lines changed

4 files changed

+46
-8
lines changed

bunq/sdk/context/user_context.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def __init__(self, user_id: int) -> None:
1414
self._user_person = None
1515
self._user_company = None
1616
self._user_api_key = None
17+
self._user_payment_service_provider = None
1718
self._primary_monetary_account = None
1819

1920
self._set_user(self.__get_user_object())
@@ -32,6 +33,9 @@ def _set_user(self, user: BunqModel) -> None:
3233
elif isinstance(user, endpoint.UserApiKey):
3334
self._user_api_key = user
3435

36+
elif isinstance(user, endpoint.UserPaymentServiceProvider):
37+
self._user_payment_service_provider = user
38+
3539
else:
3640
raise BunqException(
3741
self._ERROR_UNEXPECTED_USER_INSTANCE.format(user.__class__))
@@ -73,6 +77,10 @@ def is_all_user_type_set(self) -> bool:
7377

7478
def refresh_user_context(self) -> None:
7579
self._set_user(self.__get_user_object())
80+
81+
if self._user_payment_service_provider is not None:
82+
return
83+
7684
self.init_main_monetary_account()
7785

7886
@property

bunq/sdk/http/api_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,12 @@ class ApiClient:
3333
_URL_DEVICE_SERVER = 'device-server'
3434
_URI_INSTALLATION = 'installation'
3535
_URI_SESSION_SERVER = 'session-server'
36+
_URL_PAYMENT_SERVICE_PROVIDER_CREDENTIAL = 'payment-service-provider-credential'
3637
_URIS_NOT_REQUIRING_ACTIVE_SESSION = [
3738
_URI_INSTALLATION,
3839
_URI_SESSION_SERVER,
3940
_URL_DEVICE_SERVER,
41+
_URL_PAYMENT_SERVICE_PROVIDER_CREDENTIAL,
4042
]
4143

4244
# HTTPS type of proxy, the only used at bunq

bunq/sdk/json/session_server_adapter.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ class SessionServerAdapter(converter.JsonAdapter):
3737
_ATTRIBUTE_USER_API_KEY = '_user_api_key'
3838
_FIELD_USER_API_KEY = 'UserApiKey'
3939

40+
# UserPaymentServiceProvider constants
41+
_ATTRIBUTE_USER_PAYMENT_SERVER_PROVIDER = '_user_payment_service_provider'
42+
_FIELD_USER_PAYMENT_SERVER_PROVIDER = 'UserPaymentServiceProvider'
43+
4044
@classmethod
4145
def deserialize(cls,
4246
target_class: Type[SessionServer],
@@ -52,7 +56,7 @@ def deserialize(cls,
5256
array[cls._INDEX_TOKEN][cls._FIELD_TOKEN]
5357
),
5458
cls._ATTRIBUTE_USER_COMPANY: None,
55-
cls._ATTRIBUTE_USER_PERSON: None,
59+
cls._ATTRIBUTE_USER_PERSON: None
5660
}
5761

5862
user_dict_wrapped = array[cls._INDEX_USER]
@@ -75,6 +79,12 @@ def deserialize(cls,
7579
endpoint.UserApiKey,
7680
user_dict_wrapped[cls._FIELD_USER_API_KEY]
7781
)
82+
elif cls._FIELD_USER_PAYMENT_SERVER_PROVIDER in user_dict_wrapped:
83+
session_server.__dict__[cls._ATTRIBUTE_USER_PAYMENT_SERVER_PROVIDER] = \
84+
converter.deserialize(
85+
endpoint.UserPaymentServiceProvider,
86+
user_dict_wrapped[cls._FIELD_USER_PAYMENT_SERVER_PROVIDER]
87+
)
7888
else:
7989
raise BunqException(cls._ERROR_COULD_NOT_DETERMINE_USER)
8090

@@ -97,4 +107,8 @@ def serialize(cls, session_server: SessionServer) -> List:
97107
cls._FIELD_USER_API_KEY:
98108
converter.serialize(session_server.user_api_key),
99109
},
110+
{
111+
cls._FIELD_USER_PAYMENT_SERVER_PROVIDER:
112+
converter.serialize(session_server.user_payment_service_provider),
113+
},
100114
]

bunq/sdk/model/core/session_server.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import annotations
22

3+
from typing import Optional
4+
35
from bunq.sdk.context.api_context import ApiContext
46
from bunq.sdk.exception.bunq_exception import BunqException
57
from bunq.sdk.http.api_client import ApiClient
@@ -8,16 +10,17 @@
810
from bunq.sdk.model.core.bunq_model import BunqModel
911
from bunq.sdk.model.core.id import Id
1012
from bunq.sdk.model.core.session_token import SessionToken
11-
from bunq.sdk.model.generated.endpoint import UserPerson, UserCompany, UserApiKey
13+
from bunq.sdk.model.generated.endpoint import UserPerson, UserCompany, UserApiKey, UserPaymentServiceProvider
1214

1315

1416
class SessionServer(BunqModel):
1517
"""
16-
:type _id_: Id
17-
:type _token: SessionToken
18-
:type _user_person: bunq.sdk.model.generated.UserPerson
19-
:type _user_company: bunq.sdk.model.generated.UserCompany
20-
:type _user_api_key: bunq.sdk.model.generated.UserApiKey
18+
:type _id_: Id|None
19+
:type _token: SessionToken|None
20+
:type _user_person: UserPerson|None
21+
:type _user_company: UserCompany|None
22+
:type _user_api_key: UserApiKey|None
23+
:type _user_payment_service_provider:UserPaymentServiceProvider|None
2124
"""
2225

2326
# Endpoint name.
@@ -35,6 +38,7 @@ def __init__(self) -> None:
3538
self._user_person = None
3639
self._user_company = None
3740
self._user_api_key = None
41+
self._user_payment_service_provider = None
3842

3943
@property
4044
def id_(self) -> Id:
@@ -53,9 +57,13 @@ def user_company(self) -> UserCompany:
5357
return self._user_company
5458

5559
@property
56-
def user_api_key(self) -> UserApiKey:
60+
def user_api_key(self) -> Optional[UserApiKey]:
5761
return self._user_api_key
5862

63+
@property
64+
def user_payment_service_provider(self) -> UserPaymentServiceProvider:
65+
return self._user_payment_service_provider
66+
5967
@classmethod
6068
def create(cls, api_context: ApiContext) -> BunqResponse[SessionServer]:
6169
api_client = ApiClient(api_context)
@@ -81,6 +89,9 @@ def is_all_field_none(self) -> bool:
8189
if self.user_company is not None:
8290
return False
8391

92+
if self.user_payment_service_provider is not None:
93+
return False
94+
8495
if self.user_api_key is not None:
8596
return False
8697

@@ -93,6 +104,9 @@ def get_referenced_user(self) -> BunqModel:
93104
if self._user_company is not None:
94105
return self._user_company
95106

107+
if self._user_payment_service_provider is not None:
108+
return self._user_payment_service_provider
109+
96110
if self._user_api_key is not None:
97111
return self._user_api_key
98112

0 commit comments

Comments
 (0)