Skip to content

Commit 1ee3dec

Browse files
authored
Merge pull request #103 from bunq/oauth-bunq/sdk_python#102
Oauth #102
2 parents fb9a555 + 7795f7e commit 1ee3dec

File tree

7 files changed

+14358
-17102
lines changed

7 files changed

+14358
-17102
lines changed

bunq/sdk/context.py

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ def _initialize_session(self):
137137
session_server = core.SessionServer.create(self).value
138138
token = session_server.token.token
139139
expiry_time = self._get_expiry_timestamp(session_server)
140-
user_id = session_server.get_referenced_object().id_
140+
user_id = session_server.get_referenced_user().id_
141141

142142
self._session_context = SessionContext(token, expiry_time, user_id)
143143

@@ -164,8 +164,16 @@ def _get_session_timeout_seconds(cls, session_server):
164164

165165
if session_server.user_company is not None:
166166
return session_server.user_company.session_timeout
167-
else:
167+
elif session_server.user_person is not None:
168168
return session_server.user_person.session_timeout
169+
elif session_server.user_api_key is not None:
170+
return session_server \
171+
.user_api_key \
172+
.requested_by_user \
173+
.get_referenced_object() \
174+
.session_timeout
175+
else:
176+
raise BunqException()
169177

170178
def ensure_session_active(self) -> bool:
171179
"""
@@ -433,6 +441,7 @@ def __init__(self, user_id):
433441
self._user_id = user_id
434442
self._user_person = None
435443
self._user_company = None
444+
self._user_api_key = None
436445
self._primary_monetary_account = None
437446

438447
self._set_user(self.__get_user_object())
@@ -452,6 +461,9 @@ def _set_user(self, user):
452461
elif isinstance(user, endpoint.UserCompany):
453462
self._user_company = user
454463

464+
elif isinstance(user, endpoint.UserApiKey):
465+
self._user_api_key = user
466+
455467
else:
456468
raise BunqException(
457469
self._ERROR_UNEXPECTED_USER_INSTANCE.format(user.__class__))
@@ -476,21 +488,36 @@ def is_only_user_person_set(self):
476488
:rtype: bool
477489
"""
478490

479-
return self._user_person is not None and self._user_company is None
491+
return self._user_person is not None \
492+
and self._user_company is None \
493+
and self._user_api_key is None
480494

481495
def is_only_user_company_set(self):
482496
"""
483497
:rtype: bool
484498
"""
485499

486-
return self._user_company is not None and self._user_person is None
500+
return self._user_company is not None \
501+
and self._user_person is None \
502+
and self._user_api_key is None
487503

488-
def is_both_user_type_set(self):
504+
def is_only_user_api_key_set(self):
489505
"""
490506
:rtype: bool
491507
"""
492508

493-
return self._user_company is not None and self._user_person is not None
509+
return self._user_api_key is not None \
510+
and self._user_company is None \
511+
and self._user_person is None
512+
513+
def is_all_user_type_set(self):
514+
"""
515+
:rtype: bool
516+
"""
517+
518+
return self._user_company is not None \
519+
and self._user_person is not None \
520+
and self._user_api_key is not None
494521

495522
def refresh_user_context(self):
496523
"""
@@ -515,6 +542,14 @@ def user_person(self):
515542

516543
return self._user_person
517544

545+
@property
546+
def user_api_key(self):
547+
"""
548+
:rtype: endpoint.UserApiKey
549+
"""
550+
551+
return self._user_api_key
552+
518553
@property
519554
def primary_monetary_account(self):
520555
"""

bunq/sdk/json/adapters.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ def serialize(cls, installation):
140140

141141

142142
class SessionServerAdapter(converter.JsonAdapter):
143+
# Error constants.
144+
_ERROR_COULD_NOT_DETERMINE_USER = 'Could not determine user.'
145+
143146
# Id constants
144147
_ATTRIBUTE_ID = '_id_'
145148
_INDEX_ID = 0
@@ -161,6 +164,10 @@ class SessionServerAdapter(converter.JsonAdapter):
161164
_ATTRIBUTE_USER_PERSON = '_user_person'
162165
_FIELD_USER_PERSON = 'UserPerson'
163166

167+
# UserApiKey constants
168+
_ATTRIBUTE_USER_API_KEY = '_user_api_key'
169+
_FIELD_USER_API_KEY = 'UserApiKey'
170+
164171
@classmethod
165172
def deserialize(cls, target_class, array):
166173
"""
@@ -198,6 +205,14 @@ def deserialize(cls, target_class, array):
198205
endpoint.UserPerson,
199206
user_dict_wrapped[cls._FIELD_USER_PERSON]
200207
)
208+
elif cls._FIELD_USER_API_KEY in user_dict_wrapped:
209+
session_server.__dict__[cls._ATTRIBUTE_USER_API_KEY] = \
210+
converter.deserialize(
211+
endpoint.UserApiKey,
212+
user_dict_wrapped[cls._FIELD_USER_API_KEY]
213+
)
214+
else:
215+
raise BunqException(cls._ERROR_COULD_NOT_DETERMINE_USER)
201216

202217
return session_server
203218

@@ -220,6 +235,10 @@ def serialize(cls, session_server):
220235
cls._FIELD_USER_PERSON:
221236
converter.serialize(session_server.user_person),
222237
},
238+
{
239+
cls._FIELD_USER_API_KEY:
240+
converter.serialize(session_server.user_api_key),
241+
},
223242
]
224243

225244

bunq/sdk/model/core.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ class SessionServer(BunqModel):
403403
:type _token: SessionToken
404404
:type _user_person: bunq.sdk.model.generated.UserPerson
405405
:type _user_company: bunq.sdk.model.generated.UserCompany
406+
:type _user_api_key: bunq.sdk.model.generated.UserApiKey
406407
"""
407408

408409
# Endpoint name.
@@ -419,6 +420,7 @@ def __init__(self):
419420
self._token = None
420421
self._user_person = None
421422
self._user_company = None
423+
self._user_api_key = None
422424

423425
@property
424426
def id_(self):
@@ -452,6 +454,14 @@ def user_company(self):
452454

453455
return self._user_company
454456

457+
@property
458+
def user_api_key(self):
459+
"""
460+
:rtype: bunq.sdk.model.generated.UserApiKey
461+
"""
462+
463+
return self._user_api_key
464+
455465
@classmethod
456466
def create(cls, api_context):
457467
"""
@@ -489,9 +499,12 @@ def is_all_field_none(self):
489499
if self.user_company is not None:
490500
return False
491501

502+
if self.user_api_key is not None:
503+
return False
504+
492505
return True
493506

494-
def get_referenced_object(self):
507+
def get_referenced_user(self):
495508
"""
496509
:rtype: BunqModel
497510
"""
@@ -502,4 +515,7 @@ def get_referenced_object(self):
502515
if self._user_company is not None:
503516
return self._user_company
504517

518+
if self._user_api_key is not None:
519+
return self._user_api_key
520+
505521
raise BunqException(self._ERROR_ALL_FIELD_IS_NULL)

0 commit comments

Comments
 (0)