Skip to content

feature/sdk_python#151 Deprecated SandboxUser and replaced it with SandboxUserPerson/Company #152

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 14, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Creating objects through the API requires an `ApiContext`, a `requestMap` and id
dependencies (such as User ID required for accessing a Monetary Account). Optionally, custom headers
can be passed to requests.

payment_id = endpoint.Payment.create(
payment_id = Payment.create(
amount=Amount(amount_string, self._CURRENCY_EURL),
counterparty_alias=Pointer(self._POINTER_TYPE_EMAIL, recipient),
description=description
Expand All @@ -109,7 +109,7 @@ See [`tinker/list_all_payment`](https://github.com/bunq/tinker_python/blob/2182b
Updating objects through the API goes the same way as creating objects, except that also the object to update identifier
(ID or UUID) is needed.

endpoint.Card.update(
Card.update(
card_id=int(card_id),
monetary_account_current_id=int(account_id)
)
Expand All @@ -130,7 +130,7 @@ passed to requests.
Listing objects through the API requires an `ApiContext` and identifiers of all dependencies (such as User ID required
for accessing a Monetary Account). Optionally, custom headers can be passed to requests.

users = endpoint.User.list(api_context)
users = User.list(api_context)

##### Example
See [`UserListExample.py`](./examples/user_list_example.py)
Expand Down
7 changes: 4 additions & 3 deletions bunq/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from bunq.sdk.http.pagination import Pagination
from bunq.sdk.json import converter
from bunq.sdk.model.core.anchor_object_interface import AnchorObjectInterface
from bunq.sdk.model.generated.object_ import Geolocation, ShareDetail, MonetaryAccountReference
from bunq.sdk.util.type_alias import T


Expand Down Expand Up @@ -36,9 +37,9 @@ def initialize_converter() -> None:
converter.register_adapter(InstallationContext, InstallationContextAdapter)
converter.register_adapter(ApiEnvironmentType, ApiEnvironmentTypeAdapter)
converter.register_adapter(float, FloatAdapter)
converter.register_adapter(object_.Geolocation, GeolocationAdapter)
converter.register_adapter(object_.MonetaryAccountReference, MonetaryAccountReferenceAdapter)
converter.register_adapter(object_.ShareDetail, ShareDetailAdapter)
converter.register_adapter(Geolocation, GeolocationAdapter)
converter.register_adapter(MonetaryAccountReference, MonetaryAccountReferenceAdapter)
converter.register_adapter(ShareDetail, ShareDetailAdapter)
converter.register_adapter(datetime.datetime, DateTimeAdapter)
converter.register_adapter(Pagination, PaginationAdapter)

Expand Down
5 changes: 2 additions & 3 deletions bunq/sdk/context/api_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
from bunq.sdk.exception.bunq_exception import BunqException
from bunq.sdk.json import converter
from bunq.sdk.model.core.payment_service_provider_credential_internal import PaymentServiceProviderCredentialInternal
from bunq.sdk.model.generated import endpoint
from bunq.sdk.model.generated.endpoint import UserCredentialPasswordIp
from bunq.sdk.model.generated.endpoint import UserCredentialPasswordIp, Session
from bunq.sdk.security import security

if typing.TYPE_CHECKING:
Expand Down Expand Up @@ -221,7 +220,7 @@ def close_session(self) -> None:
self._drop_session_context()

def _delete_session(self) -> None:
endpoint.Session.delete(self._SESSION_ID_DUMMY)
Session.delete(self._SESSION_ID_DUMMY)

@property
def environment_type(self) -> ApiEnvironmentType:
Expand Down
17 changes: 8 additions & 9 deletions bunq/sdk/context/user_context.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from bunq import T
from bunq.sdk.exception.bunq_exception import BunqException
from bunq.sdk.model.core.bunq_model import BunqModel
from bunq.sdk.model.generated import endpoint
from bunq.sdk.model.generated.endpoint import UserPerson, UserCompany, UserApiKey, MonetaryAccountBank
from bunq.sdk.model.generated.endpoint import UserPerson, UserCompany, UserApiKey, MonetaryAccountBank, User, \
UserPaymentServiceProvider


class UserContext:
Expand All @@ -22,19 +21,19 @@ def __init__(self, user_id: int, user: BunqModel) -> None:

@staticmethod
def __get_user_object() -> BunqModel:
return endpoint.User.list().value[0].get_referenced_object()
return User.list().value[0].get_referenced_object()

def _set_user(self, user: BunqModel) -> None:
if isinstance(user, endpoint.UserPerson):
if isinstance(user, UserPerson):
self._user_person = user

elif isinstance(user, endpoint.UserCompany):
elif isinstance(user, UserCompany):
self._user_company = user

elif isinstance(user, endpoint.UserApiKey):
elif isinstance(user, UserApiKey):
self._user_api_key = user

elif isinstance(user, endpoint.UserPaymentServiceProvider):
elif isinstance(user, UserPaymentServiceProvider):
self._user_payment_service_provider = user

else:
Expand All @@ -45,7 +44,7 @@ def init_main_monetary_account(self) -> None:
if self._user_payment_service_provider is not None:
return

all_monetary_account = endpoint.MonetaryAccountBank.list().value
all_monetary_account = MonetaryAccountBank.list().value

for account in all_monetary_account:
if account.status == self._STATUS_ACTIVE:
Expand Down
8 changes: 2 additions & 6 deletions bunq/sdk/json/monetary_account_reference_adapter.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
from typing import Type, Dict

from bunq.sdk.json import converter
from bunq.sdk.model.generated import object_
from bunq.sdk.model.generated.object_ import MonetaryAccountReference
from bunq.sdk.model.generated.object_ import MonetaryAccountReference, LabelMonetaryAccount


class MonetaryAccountReferenceAdapter(converter.JsonAdapter):
@classmethod
def deserialize(cls,
target_class: Type[MonetaryAccountReference],
obj: Dict) -> MonetaryAccountReference:
label_monetary_account = converter.deserialize(
object_.LabelMonetaryAccount,
obj
)
label_monetary_account = converter.deserialize(LabelMonetaryAccount, obj)

return target_class.create_from_label_monetary_account(label_monetary_account)

Expand Down
10 changes: 5 additions & 5 deletions bunq/sdk/json/session_server_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from bunq.sdk.model.core.id import Id
from bunq.sdk.model.core.session_server import SessionServer
from bunq.sdk.model.core.session_token import SessionToken
from bunq.sdk.model.generated import endpoint
from bunq.sdk.model.generated.endpoint import UserCompany, UserPerson, UserApiKey, UserPaymentServiceProvider


class SessionServerAdapter(converter.JsonAdapter):
Expand Down Expand Up @@ -65,25 +65,25 @@ def deserialize(cls,
if cls._FIELD_USER_COMPANY in user_dict_wrapped:
session_server.__dict__[cls._ATTRIBUTE_USER_COMPANY] = \
converter.deserialize(
endpoint.UserCompany,
UserCompany,
user_dict_wrapped[cls._FIELD_USER_COMPANY]
)
elif cls._FIELD_USER_PERSON in user_dict_wrapped:
session_server.__dict__[cls._ATTRIBUTE_USER_PERSON] = \
converter.deserialize(
endpoint.UserPerson,
UserPerson,
user_dict_wrapped[cls._FIELD_USER_PERSON]
)
elif cls._FIELD_USER_API_KEY in user_dict_wrapped:
session_server.__dict__[cls._ATTRIBUTE_USER_API_KEY] = \
converter.deserialize(
endpoint.UserApiKey,
UserApiKey,
user_dict_wrapped[cls._FIELD_USER_API_KEY]
)
elif cls._FIELD_USER_PAYMENT_SERVER_PROVIDER in user_dict_wrapped:
session_server.__dict__[cls._ATTRIBUTE_USER_PAYMENT_SERVER_PROVIDER] = \
converter.deserialize(
endpoint.UserPaymentServiceProvider,
UserPaymentServiceProvider,
user_dict_wrapped[cls._FIELD_USER_PAYMENT_SERVER_PROVIDER]
)
else:
Expand Down
14 changes: 7 additions & 7 deletions bunq/sdk/json/share_detail_adapter.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from typing import Dict, Type, Optional

from bunq.sdk.json import converter
from bunq.sdk.model.generated import object_
from bunq.sdk.model.generated.object_ import ShareDetail
from bunq.sdk.model.generated.object_ import ShareDetail, ShareDetailPayment, ShareDetailReadOnly, \
ShareDetailDraftPayment


class ShareDetailAdapter(converter.JsonAdapter):
Expand All @@ -21,24 +21,24 @@ def deserialize(cls,
target_class: Type[ShareDetail],
obj: Dict) -> ShareDetail:
"""
:type target_class: object_.ShareDetail|type
:type target_class: ShareDetail|type
:type obj: dict

:rtype: object_.ShareDetail
:rtype: ShareDetail
"""

share_detail = target_class.__new__(target_class)
share_detail.__dict__ = {
cls._ATTRIBUTE_PAYMENT: converter.deserialize(
object_.ShareDetailPayment,
ShareDetailPayment,
cls._get_field_or_none(cls._FIELD_DRAFT_PAYMENT, obj)
),
cls._ATTRIBUTE_READ_ONLY: converter.deserialize(
object_.ShareDetailReadOnly,
ShareDetailReadOnly,
cls._get_field_or_none(cls._FIELD_READ_ONLY, obj)
),
cls._ATTRIBUTE_DRAFT_PAYMENT: converter.deserialize(
object_.ShareDetailDraftPayment,
ShareDetailDraftPayment,
cls._get_field_or_none(cls._FIELD_DRAFT_PAYMENT, obj)
),
}
Expand Down
2 changes: 1 addition & 1 deletion bunq/sdk/model/core/bunq_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import typing
from typing import Dict, List

from bunq import T
from bunq.sdk.util.type_alias import T
from bunq.sdk.http.bunq_response import BunqResponse
from bunq.sdk.http.bunq_response_raw import BunqResponseRaw
from bunq.sdk.json import converter
Expand Down
10 changes: 5 additions & 5 deletions bunq/sdk/util/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
from bunq.sdk.exception.bunq_exception import BunqException
from bunq.sdk.http.api_client import ApiClient
from bunq.sdk.model.generated import endpoint
from bunq.sdk.model.generated.endpoint import SandboxUser
from bunq.sdk.model.generated.endpoint import SandboxUserPerson

__UNIQUE_REQUEST_ID = "uniqueness-is-required"
__FIELD_API_KEY = "ApiKey"
__INDEX_FIRST = 0
__FIELD_RESPONSE = "Response"
__ENDPOINT_SANDBOX_USER = "sandbox-user"
__ENDPOINT_SANDBOX_USER_PERSON = "sandbox-user-person"

_ERROR_COULD_NOT_CREATE_NEW_SANDBOX_USER = "Could not create new sandbox user."

Expand All @@ -29,8 +29,8 @@ def automatic_sandbox_install() -> ApiContext:
)


def __generate_new_sandbox_user() -> SandboxUser:
url = ApiEnvironmentType.SANDBOX.uri_base + __ENDPOINT_SANDBOX_USER
def __generate_new_sandbox_user() -> SandboxUserPerson:
url = ApiEnvironmentType.SANDBOX.uri_base + __ENDPOINT_SANDBOX_USER_PERSON

headers = {
ApiClient.HEADER_REQUEST_ID: __UNIQUE_REQUEST_ID,
Expand All @@ -44,7 +44,7 @@ def __generate_new_sandbox_user() -> SandboxUser:

if response.status_code is ApiClient.STATUS_CODE_OK:
response_json = json.loads(response.text)
return endpoint.SandboxUser.from_json(
return SandboxUserPerson.from_json(
json.dumps(response_json[__FIELD_RESPONSE][__INDEX_FIRST][
__FIELD_API_KEY]))

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
],

# Require Python version equal or higher than the requested version.
python_requires='>=3.5.3',
python_requires='>=3.7.0',

# Keywords related to the project
keywords='open-banking sepa bunq finance api payment',
Expand Down
4 changes: 2 additions & 2 deletions tests/context/test_user_context.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from bunq.sdk.context.user_context import UserContext
from tests.bunq_test import BunqSdkTestCase


Expand All @@ -14,7 +13,8 @@ def setUpClass(cls):
cls._API_CONTEXT = cls._get_api_context()

def test_build_user_context(self):
user_context = UserContext(self._API_CONTEXT.session_context.user_id)
from bunq.sdk.context.user_context import UserContext
user_context = UserContext(self._API_CONTEXT.session_context.user_id, self._API_CONTEXT.session_context.user)
user_context.refresh_user_context()

self.assertIsNotNone(user_context.user_id)
Expand Down
6 changes: 3 additions & 3 deletions tests/model/generated/endpoint/test_attachment_public.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from typing import AnyStr

from bunq.sdk.http.api_client import ApiClient
from bunq.sdk.model.generated import endpoint
from bunq.sdk.model.generated.endpoint import AttachmentPublicContent, AttachmentPublic
from tests.bunq_test import BunqSdkTestCase


Expand All @@ -25,8 +25,8 @@ def test_file_upload_and_retrieval(self):
self._ATTACHMENT_DESCRIPTION,
}

attachment_uuid = endpoint.AttachmentPublic.create(self.attachment_contents, custom_headers).value
contents_from_response = endpoint.AttachmentPublicContent.list(attachment_uuid).value
attachment_uuid = AttachmentPublic.create(self.attachment_contents, custom_headers).value
contents_from_response = AttachmentPublicContent.list(attachment_uuid).value

self.assertEqual(self.attachment_contents, contents_from_response)

Expand Down
19 changes: 9 additions & 10 deletions tests/model/generated/endpoint/test_payment.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from typing import List

from bunq.sdk.model.generated import endpoint
from bunq.sdk.model.generated.endpoint import Payment
from bunq.sdk.model.generated.endpoint import Payment, PaymentBatch, BunqResponseInt, BunqResponsePaymentBatch
from bunq.sdk.model.generated.object_ import Amount, Pointer
from tests.bunq_test import BunqSdkTestCase

Expand Down Expand Up @@ -29,7 +28,7 @@ def test_payment_to_other_user(self):
without errors
"""

endpoint.Payment.create(
Payment.create(
Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
self._get_pointer_bravo(),
self._PAYMENT_DESCRIPTION
Expand All @@ -43,21 +42,21 @@ def test_payment_to_other_account(self):
without errors
"""

endpoint.Payment.create(
Payment.create(
Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
self._get_alias_second_account(),
self._PAYMENT_DESCRIPTION
)

def test_payment_batch(self):
response_create = endpoint.PaymentBatch.create(self.__create_payment_list())
response_create = PaymentBatch.create(self.__create_payment_list())

self.assertIsInstance(response_create, endpoint.BunqResponseInt)
self.assertIsInstance(response_create, BunqResponseInt)
self.assertIsNotNone(response_create)

response_get = endpoint.PaymentBatch.get(response_create.value)
response_get = PaymentBatch.get(response_create.value)

self.assertIsInstance(response_get, endpoint.BunqResponsePaymentBatch)
self.assertIsInstance(response_get, BunqResponsePaymentBatch)
self.assertIsNotNone(response_get)
self.assertFalse(response_get.value.is_all_field_none())

Expand All @@ -66,13 +65,13 @@ def __create_payment_list(self) -> List[Payment]:

while len(all_payment) < self._MAXIMUM_PAYMENT_IN_BATCH:
all_payment.append(
endpoint.Payment(
Payment(
Amount(self._PAYMENT_AMOUNT_EUR, self._PAYMENT_CURRENCY),
Pointer(self._POINTER_EMAIL, self._EMAIL_BRAVO),
self._PAYMENT_DESCRIPTION
)
)
self.assertIsInstance(all_payment, List)
self.assertIsInstance(all_payment[0], endpoint.Payment)
self.assertIsInstance(all_payment[0], Payment)

return all_payment
2 changes: 1 addition & 1 deletion tests/model/generated/object/test_notification_url.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ def get_notification_url(self, file_path: str) -> NotificationUrl:

self.assertTrue(self._KEY_NOTIFICATION_URL_MODEL in json_object)

return object_.NotificationUrl.from_json(json_string)
return NotificationUrl.from_json(json_string)

def test_mutation_model(self):
self.execute_notification_url_test(
Expand Down