Skip to content
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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@ htmlcov
.cursor/rules/
.cursor/skills/
.vscode/settings.json

.claude/
CLAUDE.md
23 changes: 17 additions & 6 deletions checkout_sdk/checkout_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,20 @@ def _balances_api_client(configuration: CheckoutConfiguration) -> ApiClient:
return ApiClient(configuration, configuration.environment.balances_uri)


def _forward_api_client(configuration: CheckoutConfiguration) -> ApiClient:
return ApiClient(configuration, configuration.environment.forward_uri)


def _identity_api_client(configuration: CheckoutConfiguration) -> ApiClient:
return ApiClient(configuration, configuration.environment.identity_uri)


class CheckoutApi(CheckoutApmApi):

def __init__(self, configuration: CheckoutConfiguration):
base_api_client = _base_api_client(configuration)
forward_api_client = _forward_api_client(configuration)
identity_api_client = _identity_api_client(configuration)
super().__init__(base_api_client, configuration)
self.tokens = TokensClient(api_client=base_api_client, configuration=configuration)
self.customers = CustomersClient(api_client=base_api_client, configuration=configuration)
Expand All @@ -87,16 +97,17 @@ def __init__(self, configuration: CheckoutConfiguration):
self.issuing = IssuingClient(api_client=base_api_client, configuration=configuration)
self.contexts = PaymentContextsClient(api_client=base_api_client, configuration=configuration)
self.payment_sessions = PaymentSessionsClient(api_client=base_api_client, configuration=configuration)
self.forward = ForwardClient(api_client=base_api_client, configuration=configuration)
self.forward = ForwardClient(api_client=forward_api_client, configuration=configuration)
self.setups = PaymentSetupsClient(api_client=base_api_client, configuration=configuration)
self.agentic_commerce = AgenticCommerceClient(api_client=base_api_client, configuration=configuration)
self.apple_pay = ApplePayClient(api_client=base_api_client, configuration=configuration)
self.google_pay = GooglePayClient(api_client=base_api_client, configuration=configuration)
self.standalone_account_updater = StandaloneAccountUpdaterClient(api_client=base_api_client,
configuration=configuration)
self.aml_screening = AmlScreeningClient(api_client=base_api_client, configuration=configuration)
self.face_authentication = FaceAuthenticationClient(api_client=base_api_client, configuration=configuration)
self.id_document_verification = IdDocumentVerificationClient(api_client=base_api_client,
self.aml_screening = AmlScreeningClient(api_client=identity_api_client, configuration=configuration)
self.face_authentication = FaceAuthenticationClient(api_client=identity_api_client, configuration=configuration)
self.id_document_verification = IdDocumentVerificationClient(api_client=identity_api_client,
configuration=configuration)
self.applicants = ApplicantsClient(api_client=base_api_client, configuration=configuration)
self.identity_verification = IdentityVerificationClient(api_client=base_api_client, configuration=configuration)
self.applicants = ApplicantsClient(api_client=identity_api_client, configuration=configuration)
self.identity_verification = IdentityVerificationClient(api_client=identity_api_client,
configuration=configuration)
8 changes: 8 additions & 0 deletions checkout_sdk/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@ def __init__(self, base_uri,
files_uri,
transfers_uri,
balances_uri,
forward_uri,
identity_uri,
is_sandbox):
self.base_uri = base_uri
self.authorization_uri = authorization_uri
self.files_uri = files_uri
self.transfers_uri = transfers_uri
self.balances_uri = balances_uri
self.forward_uri = forward_uri
self.identity_uri = identity_uri
self.is_sandbox = is_sandbox

@staticmethod
Expand All @@ -23,6 +27,8 @@ def sandbox():
files_uri='https://files.sandbox.checkout.com/',
transfers_uri='https://transfers.sandbox.checkout.com/',
balances_uri='https://balances.sandbox.checkout.com/',
forward_uri='https://forward.sandbox.checkout.com/',
identity_uri='https://identity-verification.sandbox.checkout.com/',
is_sandbox=True)

@staticmethod
Expand All @@ -32,4 +38,6 @@ def production():
files_uri='https://files.checkout.com/',
transfers_uri='https://transfers.checkout.com/',
balances_uri='https://balances.checkout.com/',
forward_uri='https://forward.checkout.com/',
identity_uri='https://identity-verification.checkout.com/',
is_sandbox=False)
2 changes: 1 addition & 1 deletion checkout_sdk/environment_subdomain.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def create_url_with_subdomain(original_url: str, subdomain: str):
"""
new_environment = original_url

regex = r'^[0-9a-z]+$'
regex = r'^(?:pl-)?[a-z0-9]+$'
if re.match(regex, subdomain):
url_parts = urlparse(original_url)
if url_parts.port:
Expand Down
26 changes: 24 additions & 2 deletions tests/checkout_configuration_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,30 @@ def test_should_create_configuration():
assert configuration.environment_subdomain is None


def test_environment_sandbox_urls():
env = Environment.sandbox()
assert env.base_uri == "https://api.sandbox.checkout.com/"
assert env.forward_uri == "https://forward.sandbox.checkout.com/"
assert env.identity_uri == "https://identity-verification.sandbox.checkout.com/"


def test_environment_production_urls():
env = Environment.production()
assert env.base_uri == "https://api.checkout.com/"
assert env.forward_uri == "https://forward.checkout.com/"
assert env.identity_uri == "https://identity-verification.checkout.com/"


@pytest.mark.parametrize(
"subdomain, expected_url",
[
("a", "https://a.api.sandbox.checkout.com/"),
("ab", "https://ab.api.sandbox.checkout.com/"),
("abc", "https://abc.api.sandbox.checkout.com/"),
("abc1", "https://abc1.api.sandbox.checkout.com/"),
("12345domain", "https://12345domain.api.sandbox.checkout.com/")
("12345domain", "https://12345domain.api.sandbox.checkout.com/"),
("pl-vkuhvk4v", "https://pl-vkuhvk4v.api.sandbox.checkout.com/"),
("pl-abc123", "https://pl-abc123.api.sandbox.checkout.com/")
]
)
def test_should_create_configuration_with_subdomain(subdomain, expected_url):
Expand Down Expand Up @@ -74,7 +90,13 @@ def test_should_create_configuration_with_subdomain(subdomain, expected_url):
(" ", "https://api.sandbox.checkout.com/"),
(" - ", "https://api.sandbox.checkout.com/"),
("a b", "https://api.sandbox.checkout.com/"),
("ab c1.", "https://api.sandbox.checkout.com/")
("ab c1.", "https://api.sandbox.checkout.com/"),
("foo-", "https://api.sandbox.checkout.com/"),
("-foo", "https://api.sandbox.checkout.com/"),
("FooBar", "https://api.sandbox.checkout.com/"),
("test-123", "https://api.sandbox.checkout.com/"),
("foo-bar", "https://api.sandbox.checkout.com/"),
("pl-", "https://api.sandbox.checkout.com/")
]
)
def test_should_create_configuration_with_bad_subdomain(subdomain, expected_url):
Expand Down
Loading