mollie-api-py 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mollie/__init__.py +18 -0
- mollie/_hooks/__init__.py +5 -0
- mollie/_hooks/mollie_hooks.py +165 -0
- mollie/_hooks/registration.py +18 -0
- mollie/_hooks/sdkhooks.py +76 -0
- mollie/_hooks/types.py +113 -0
- mollie/_version.py +15 -0
- mollie/balance_transfers.py +651 -0
- mollie/balances.py +1105 -0
- mollie/basesdk.py +360 -0
- mollie/capabilities.py +209 -0
- mollie/captures.py +677 -0
- mollie/chargebacks_sdk.py +675 -0
- mollie/client_links.py +325 -0
- mollie/clients.py +409 -0
- mollie/customers.py +1563 -0
- mollie/delayed_routing.py +421 -0
- mollie/httpclient.py +125 -0
- mollie/invoices.py +429 -0
- mollie/mandates.py +895 -0
- mollie/methods.py +789 -0
- mollie/models/__init__.py +4002 -0
- mollie/models/address.py +29 -0
- mollie/models/amount.py +25 -0
- mollie/models/amount_nullable.py +24 -0
- mollie/models/apierror.py +40 -0
- mollie/models/balance_card_audience.py +10 -0
- mollie/models/balance_card_issuer.py +12 -0
- mollie/models/balance_card_region.py +12 -0
- mollie/models/balance_fee_type.py +43 -0
- mollie/models/balance_prepayment_part_type.py +13 -0
- mollie/models/balance_report_grouping.py +10 -0
- mollie/models/balance_transaction_type.py +47 -0
- mollie/models/balance_transfer_category.py +17 -0
- mollie/models/balance_transfer_category_response.py +18 -0
- mollie/models/balance_transfer_destination_type.py +14 -0
- mollie/models/balance_transfer_party_type.py +10 -0
- mollie/models/balance_transfer_party_type_response.py +11 -0
- mollie/models/balance_transfer_status.py +13 -0
- mollie/models/balance_transfer_status_reason_response.py +19 -0
- mollie/models/billingaddress.py +154 -0
- mollie/models/cancel_paymentop.py +93 -0
- mollie/models/cancel_refundop.py +86 -0
- mollie/models/cancel_subscriptionop.py +100 -0
- mollie/models/capability_requirement_status.py +15 -0
- mollie/models/capability_status.py +12 -0
- mollie/models/capability_status_reason.py +10 -0
- mollie/models/capture_mode.py +15 -0
- mollie/models/capture_mode_response.py +16 -0
- mollie/models/capture_response.py +265 -0
- mollie/models/client_link_request.py +210 -0
- mollie/models/client_link_response.py +56 -0
- mollie/models/clienterror.py +30 -0
- mollie/models/components_sub_totals.py +127 -0
- mollie/models/create_captureop.py +43 -0
- mollie/models/create_client_linkop.py +29 -0
- mollie/models/create_connect_balance_transferop.py +32 -0
- mollie/models/create_customer_paymentop.py +43 -0
- mollie/models/create_customerop.py +29 -0
- mollie/models/create_mandateop.py +43 -0
- mollie/models/create_payment_linkop.py +325 -0
- mollie/models/create_paymentop.py +73 -0
- mollie/models/create_profileop.py +29 -0
- mollie/models/create_refundop.py +43 -0
- mollie/models/create_sales_invoiceop.py +29 -0
- mollie/models/create_subscriptionop.py +43 -0
- mollie/models/create_webhook.py +123 -0
- mollie/models/create_webhookop.py +69 -0
- mollie/models/currencies.py +20 -0
- mollie/models/customer_response.py +169 -0
- mollie/models/delete_customerop.py +91 -0
- mollie/models/delete_payment_linkop.py +91 -0
- mollie/models/delete_profileop.py +29 -0
- mollie/models/delete_sales_invoiceop.py +44 -0
- mollie/models/delete_values_sales_invoice.py +54 -0
- mollie/models/delete_webhookop.py +56 -0
- mollie/models/entity_balance.py +325 -0
- mollie/models/entity_balance_report.py +541 -0
- mollie/models/entity_balance_transaction.py +1068 -0
- mollie/models/entity_balance_transfer.py +62 -0
- mollie/models/entity_balance_transfer_party.py +28 -0
- mollie/models/entity_balance_transfer_party_response.py +32 -0
- mollie/models/entity_balance_transfer_response.py +159 -0
- mollie/models/entity_capability.py +75 -0
- mollie/models/entity_capability_requirement.py +87 -0
- mollie/models/entity_capture.py +63 -0
- mollie/models/entity_chargeback.py +247 -0
- mollie/models/entity_customer.py +86 -0
- mollie/models/entity_event.py +46 -0
- mollie/models/entity_invoice.py +247 -0
- mollie/models/entity_method_get.py +329 -0
- mollie/models/entity_onboarding_status.py +95 -0
- mollie/models/entity_organization.py +178 -0
- mollie/models/entity_payment_route.py +111 -0
- mollie/models/entity_payment_route_response.py +140 -0
- mollie/models/entity_permission.py +61 -0
- mollie/models/entity_refund_response.py +361 -0
- mollie/models/entity_route.py +96 -0
- mollie/models/entity_settlement.py +467 -0
- mollie/models/entity_terminal.py +160 -0
- mollie/models/entity_webhook.py +122 -0
- mollie/models/entity_webhook_event.py +149 -0
- mollie/models/error_response.py +70 -0
- mollie/models/get_balance_reportop.py +126 -0
- mollie/models/get_balanceop.py +71 -0
- mollie/models/get_captureop.py +129 -0
- mollie/models/get_chargebackop.py +129 -0
- mollie/models/get_clientop.py +216 -0
- mollie/models/get_connect_balance_transferop.py +71 -0
- mollie/models/get_current_organizationop.py +22 -0
- mollie/models/get_current_profileop.py +22 -0
- mollie/models/get_customerop.py +286 -0
- mollie/models/get_invoiceop.py +29 -0
- mollie/models/get_mandateop.py +86 -0
- mollie/models/get_methodop.py +199 -0
- mollie/models/get_next_settlementop.py +22 -0
- mollie/models/get_onboarding_statusop.py +22 -0
- mollie/models/get_open_settlementop.py +22 -0
- mollie/models/get_organizationop.py +71 -0
- mollie/models/get_partner_statusop.py +231 -0
- mollie/models/get_payment_link_paymentsop.py +188 -0
- mollie/models/get_payment_linkop.py +77 -0
- mollie/models/get_paymentop.py +128 -0
- mollie/models/get_permissionop.py +73 -0
- mollie/models/get_primary_balanceop.py +22 -0
- mollie/models/get_profileop.py +71 -0
- mollie/models/get_refundop.py +129 -0
- mollie/models/get_sales_invoiceop.py +75 -0
- mollie/models/get_settlementop.py +29 -0
- mollie/models/get_subscriptionop.py +86 -0
- mollie/models/get_terminalop.py +77 -0
- mollie/models/get_webhook_eventop.py +71 -0
- mollie/models/get_webhookop.py +71 -0
- mollie/models/internal/__init__.py +54 -0
- mollie/models/internal/globals.py +59 -0
- mollie/models/line_categories.py +13 -0
- mollie/models/line_categories_response.py +14 -0
- mollie/models/list_all_chargebacksop.py +236 -0
- mollie/models/list_all_methodsop.py +249 -0
- mollie/models/list_all_refundsop.py +230 -0
- mollie/models/list_all_subscriptionsop.py +202 -0
- mollie/models/list_balance_transactionsop.py +174 -0
- mollie/models/list_balancesop.py +171 -0
- mollie/models/list_capabilitiesop.py +62 -0
- mollie/models/list_capture_response.py +264 -0
- mollie/models/list_capturesop.py +185 -0
- mollie/models/list_chargebacksop.py +185 -0
- mollie/models/list_clientsop.py +269 -0
- mollie/models/list_connect_balance_transfersop.py +177 -0
- mollie/models/list_customer_paymentsop.py +231 -0
- mollie/models/list_customer_response.py +164 -0
- mollie/models/list_customersop.py +172 -0
- mollie/models/list_entity_balance.py +322 -0
- mollie/models/list_entity_chargeback.py +244 -0
- mollie/models/list_entity_invoice.py +244 -0
- mollie/models/list_entity_method.py +315 -0
- mollie/models/list_entity_method_all.py +391 -0
- mollie/models/list_entity_permission.py +56 -0
- mollie/models/list_entity_refund.py +352 -0
- mollie/models/list_entity_settlement.py +457 -0
- mollie/models/list_entity_terminal.py +157 -0
- mollie/models/list_entity_webhook.py +117 -0
- mollie/models/list_invoicesop.py +175 -0
- mollie/models/list_links.py +68 -0
- mollie/models/list_mandate_response.py +261 -0
- mollie/models/list_mandatesop.py +186 -0
- mollie/models/list_methodsop.py +332 -0
- mollie/models/list_payment_linksop.py +159 -0
- mollie/models/list_payment_response.py +1953 -0
- mollie/models/list_paymentsop.py +217 -0
- mollie/models/list_permissionsop.py +85 -0
- mollie/models/list_profile_response.py +194 -0
- mollie/models/list_profilesop.py +118 -0
- mollie/models/list_refundsop.py +189 -0
- mollie/models/list_route_get_response.py +97 -0
- mollie/models/list_sales_invoice_response.py +505 -0
- mollie/models/list_sales_invoicesop.py +172 -0
- mollie/models/list_settlement_capturesop.py +187 -0
- mollie/models/list_settlement_chargebacksop.py +187 -0
- mollie/models/list_settlement_paymentsop.py +233 -0
- mollie/models/list_settlement_refundsop.py +191 -0
- mollie/models/list_settlementsop.py +178 -0
- mollie/models/list_subscription_paymentsop.py +242 -0
- mollie/models/list_subscription_response.py +344 -0
- mollie/models/list_subscriptionsop.py +189 -0
- mollie/models/list_terminalsop.py +172 -0
- mollie/models/list_webhooksop.py +189 -0
- mollie/models/locale.py +32 -0
- mollie/models/locale_response.py +33 -0
- mollie/models/mandate_details_card_label_response.py +22 -0
- mollie/models/mandate_method.py +15 -0
- mollie/models/mandate_method_response.py +16 -0
- mollie/models/mandate_request.py +160 -0
- mollie/models/mandate_response.py +264 -0
- mollie/models/metadata.py +19 -0
- mollie/models/method.py +50 -0
- mollie/models/method_include_wallets_parameter.py +8 -0
- mollie/models/method_resource_parameter.py +9 -0
- mollie/models/method_response.py +59 -0
- mollie/models/method_status.py +15 -0
- mollie/models/mode.py +12 -0
- mollie/models/no_response_error.py +17 -0
- mollie/models/onboarding_vat_regulation.py +16 -0
- mollie/models/organization_vat_regulation.py +17 -0
- mollie/models/payment_address.py +130 -0
- mollie/models/payment_create_routeop.py +43 -0
- mollie/models/payment_details_card_audition_response.py +12 -0
- mollie/models/payment_details_card_funding_response.py +14 -0
- mollie/models/payment_details_card_label_response.py +23 -0
- mollie/models/payment_details_card_security_response.py +12 -0
- mollie/models/payment_details_failure_reason_response.py +25 -0
- mollie/models/payment_details_fee_region_response.py +20 -0
- mollie/models/payment_details_receipt_card_read_method_response.py +17 -0
- mollie/models/payment_details_receipt_card_verification_method_response.py +21 -0
- mollie/models/payment_details_seller_protection_response.py +20 -0
- mollie/models/payment_details_wallet_response.py +11 -0
- mollie/models/payment_line_item.py +96 -0
- mollie/models/payment_line_item_response.py +104 -0
- mollie/models/payment_line_type.py +20 -0
- mollie/models/payment_line_type_response.py +21 -0
- mollie/models/payment_link_method.py +36 -0
- mollie/models/payment_link_method_response.py +37 -0
- mollie/models/payment_link_response.py +348 -0
- mollie/models/payment_link_sequence_type.py +9 -0
- mollie/models/payment_link_sequence_type_response.py +10 -0
- mollie/models/payment_list_routesop.py +140 -0
- mollie/models/payment_method.py +53 -0
- mollie/models/payment_request.py +919 -0
- mollie/models/payment_response.py +1953 -0
- mollie/models/profile_request.py +67 -0
- mollie/models/profile_response.py +197 -0
- mollie/models/profile_review_status_response.py +12 -0
- mollie/models/recurring_line_item.py +77 -0
- mollie/models/refund_external_reference_type.py +10 -0
- mollie/models/refund_external_reference_type_response.py +11 -0
- mollie/models/refund_request.py +200 -0
- mollie/models/release_authorizationop.py +108 -0
- mollie/models/request_apple_pay_payment_sessionop.py +76 -0
- mollie/models/responsevalidationerror.py +27 -0
- mollie/models/revoke_mandateop.py +100 -0
- mollie/models/route_create_response.py +97 -0
- mollie/models/route_destination_type.py +10 -0
- mollie/models/route_destination_type_response.py +11 -0
- mollie/models/sales_invoice_discount.py +21 -0
- mollie/models/sales_invoice_discount_response.py +25 -0
- mollie/models/sales_invoice_discount_type.py +11 -0
- mollie/models/sales_invoice_discount_type_response.py +12 -0
- mollie/models/sales_invoice_email_details.py +20 -0
- mollie/models/sales_invoice_line_item.py +67 -0
- mollie/models/sales_invoice_line_item_response.py +70 -0
- mollie/models/sales_invoice_payment_details.py +59 -0
- mollie/models/sales_invoice_payment_details_response.py +66 -0
- mollie/models/sales_invoice_payment_details_source.py +12 -0
- mollie/models/sales_invoice_payment_details_source_response.py +13 -0
- mollie/models/sales_invoice_payment_term.py +16 -0
- mollie/models/sales_invoice_payment_term_response.py +17 -0
- mollie/models/sales_invoice_recipient.py +176 -0
- mollie/models/sales_invoice_recipient_locale.py +18 -0
- mollie/models/sales_invoice_recipient_locale_response.py +19 -0
- mollie/models/sales_invoice_recipient_response.py +182 -0
- mollie/models/sales_invoice_recipient_type.py +13 -0
- mollie/models/sales_invoice_recipient_type_response.py +14 -0
- mollie/models/sales_invoice_request.py +256 -0
- mollie/models/sales_invoice_response.py +509 -0
- mollie/models/sales_invoice_status.py +25 -0
- mollie/models/sales_invoice_status_response.py +26 -0
- mollie/models/sales_invoice_vat_mode.py +13 -0
- mollie/models/sales_invoice_vat_mode_response.py +14 -0
- mollie/models/sales_invoice_vat_scheme.py +11 -0
- mollie/models/sales_invoice_vat_scheme_response.py +12 -0
- mollie/models/security.py +35 -0
- mollie/models/sequence_type.py +10 -0
- mollie/models/sequence_type_response.py +11 -0
- mollie/models/sorting.py +9 -0
- mollie/models/status_reason.py +168 -0
- mollie/models/sub_group.py +52 -0
- mollie/models/sub_totals.py +120 -0
- mollie/models/submit_onboarding_dataop.py +214 -0
- mollie/models/subscription_method.py +12 -0
- mollie/models/subscription_method_response.py +13 -0
- mollie/models/subscription_request.py +213 -0
- mollie/models/subscription_response.py +349 -0
- mollie/models/terminal_brand.py +12 -0
- mollie/models/terminal_model.py +16 -0
- mollie/models/test_webhookop.py +64 -0
- mollie/models/update_customerop.py +43 -0
- mollie/models/update_payment_linkop.py +172 -0
- mollie/models/update_paymentop.py +332 -0
- mollie/models/update_profileop.py +147 -0
- mollie/models/update_sales_invoiceop.py +44 -0
- mollie/models/update_subscriptionop.py +188 -0
- mollie/models/update_values_sales_invoice.py +176 -0
- mollie/models/update_webhookop.py +83 -0
- mollie/models/url.py +24 -0
- mollie/models/url_nullable.py +25 -0
- mollie/models/webhook_event_types.py +18 -0
- mollie/models/webhook_status.py +14 -0
- mollie/onboarding.py +403 -0
- mollie/organizations.py +579 -0
- mollie/payment_links.py +1323 -0
- mollie/payments_sdk.py +1385 -0
- mollie/permissions.py +397 -0
- mollie/profiles.py +1209 -0
- mollie/py.typed +1 -0
- mollie/refunds_sdk.py +1111 -0
- mollie/sales_invoices.py +1121 -0
- mollie/sdk.py +265 -0
- mollie/sdkconfiguration.py +50 -0
- mollie/settlements.py +1735 -0
- mollie/subscriptions.py +1617 -0
- mollie/terminals.py +427 -0
- mollie/types/__init__.py +21 -0
- mollie/types/basemodel.py +39 -0
- mollie/utils/__init__.py +200 -0
- mollie/utils/annotations.py +79 -0
- mollie/utils/datetimes.py +23 -0
- mollie/utils/enums.py +74 -0
- mollie/utils/eventstreaming.py +248 -0
- mollie/utils/forms.py +223 -0
- mollie/utils/headers.py +136 -0
- mollie/utils/logger.py +27 -0
- mollie/utils/metadata.py +118 -0
- mollie/utils/queryparams.py +205 -0
- mollie/utils/requestbodies.py +66 -0
- mollie/utils/retries.py +217 -0
- mollie/utils/security.py +195 -0
- mollie/utils/serializers.py +249 -0
- mollie/utils/unmarshal_json_response.py +24 -0
- mollie/utils/url.py +155 -0
- mollie/utils/values.py +137 -0
- mollie/wallets.py +263 -0
- mollie/webhook_events.py +211 -0
- mollie/webhooks.py +1305 -0
- mollie_api_py-1.0.0.dist-info/METADATA +834 -0
- mollie_api_py-1.0.0.dist-info/RECORD +337 -0
- mollie_api_py-1.0.0.dist-info/WHEEL +4 -0
- mollie_api_py-1.0.0.dist-info/licenses/LICENSE.md +24 -0
mollie/__init__.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from ._version import (
|
|
4
|
+
__title__,
|
|
5
|
+
__version__,
|
|
6
|
+
__openapi_doc_version__,
|
|
7
|
+
__gen_version__,
|
|
8
|
+
__user_agent__,
|
|
9
|
+
)
|
|
10
|
+
from .sdk import *
|
|
11
|
+
from .sdkconfiguration import *
|
|
12
|
+
from .models import *
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
VERSION: str = __version__
|
|
16
|
+
OPENAPI_DOC_VERSION = __openapi_doc_version__
|
|
17
|
+
SPEAKEASY_GENERATOR_VERSION = __gen_version__
|
|
18
|
+
USER_AGENT = __user_agent__
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import uuid
|
|
2
|
+
import sys
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
from httpx import Request
|
|
6
|
+
from typing import Union
|
|
7
|
+
from urllib.parse import parse_qs, urlencode, urlparse, urlunparse
|
|
8
|
+
|
|
9
|
+
from .types import (
|
|
10
|
+
BeforeRequestHook,
|
|
11
|
+
BeforeRequestContext,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
def generate_idempotency_key() -> str:
|
|
15
|
+
"""
|
|
16
|
+
Generates a UUID4 to be used as an idempotency key.
|
|
17
|
+
@see https://docs.mollie.com/reference/api-idempotency#using-an-idempotency-key
|
|
18
|
+
|
|
19
|
+
:return: A string representation of a UUID4.
|
|
20
|
+
"""
|
|
21
|
+
return str(uuid.uuid4())
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class MollieHooks(BeforeRequestHook):
|
|
25
|
+
def before_request(self, hook_ctx: BeforeRequestContext, request: Request) -> Union[Request, Exception]:
|
|
26
|
+
"""
|
|
27
|
+
Modify the request before sending.
|
|
28
|
+
|
|
29
|
+
:param hook_ctx: Context for the hook, containing request metadata.
|
|
30
|
+
:param request: The HTTP request to modify.
|
|
31
|
+
:return: The modified request or an exception.
|
|
32
|
+
"""
|
|
33
|
+
# Create a copy of the headers
|
|
34
|
+
headers = dict(request.headers or {})
|
|
35
|
+
|
|
36
|
+
# Add the idempotency key if it doesn't already exist
|
|
37
|
+
headers = self._handle_idempotency_key(headers)
|
|
38
|
+
|
|
39
|
+
# Customize the User Agent header
|
|
40
|
+
headers = self._customize_user_agent(headers, hook_ctx)
|
|
41
|
+
|
|
42
|
+
# Update request with new headers first
|
|
43
|
+
request = Request(
|
|
44
|
+
method=request.method,
|
|
45
|
+
url=request.url,
|
|
46
|
+
headers=headers,
|
|
47
|
+
content=request.content,
|
|
48
|
+
extensions=request.extensions
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Then populate profile ID and testmode if OAuth (this may update headers again)
|
|
52
|
+
if self._is_oauth_request(headers, hook_ctx):
|
|
53
|
+
request = self._populate_profile_id_and_testmode(request, hook_ctx)
|
|
54
|
+
|
|
55
|
+
return request
|
|
56
|
+
|
|
57
|
+
def _is_oauth_request(self, headers: dict, hook_ctx: BeforeRequestContext) -> bool:
|
|
58
|
+
security = hook_ctx.config.security
|
|
59
|
+
|
|
60
|
+
if callable(security):
|
|
61
|
+
security = security()
|
|
62
|
+
|
|
63
|
+
if security is None:
|
|
64
|
+
return False
|
|
65
|
+
|
|
66
|
+
o_auth = getattr(security, 'o_auth', None)
|
|
67
|
+
if o_auth is None:
|
|
68
|
+
return False
|
|
69
|
+
|
|
70
|
+
return headers.get("authorization", None) == f"Bearer {o_auth}"
|
|
71
|
+
|
|
72
|
+
def _handle_idempotency_key(self, headers: dict) -> dict:
|
|
73
|
+
idempotency_key = "idempotency-key"
|
|
74
|
+
if idempotency_key not in headers or not headers[idempotency_key]:
|
|
75
|
+
headers[idempotency_key] = generate_idempotency_key()
|
|
76
|
+
return headers
|
|
77
|
+
|
|
78
|
+
def _customize_user_agent(self, headers: dict, hook_ctx: BeforeRequestContext) -> dict:
|
|
79
|
+
user_agent_key = "user-agent"
|
|
80
|
+
|
|
81
|
+
gen_version = hook_ctx.config.gen_version
|
|
82
|
+
sdk_version = hook_ctx.config.sdk_version
|
|
83
|
+
python_version = sys.version.split(" ", maxsplit=1)[0]
|
|
84
|
+
package_name = "mollie-api-py"
|
|
85
|
+
|
|
86
|
+
new_user_agent = f"Speakeasy/{gen_version} Python/{python_version} {package_name}/{sdk_version}"
|
|
87
|
+
if hook_ctx.config.globals.custom_user_agent:
|
|
88
|
+
new_user_agent = f"{new_user_agent} {hook_ctx.config.globals.custom_user_agent}"
|
|
89
|
+
|
|
90
|
+
headers[user_agent_key] = new_user_agent
|
|
91
|
+
|
|
92
|
+
return headers
|
|
93
|
+
|
|
94
|
+
def _populate_profile_id_and_testmode(self, request: Request, hook_ctx: BeforeRequestContext) -> Request:
|
|
95
|
+
client_profile_id = hook_ctx.config.globals.profile_id
|
|
96
|
+
client_testmode = hook_ctx.config.globals.testmode
|
|
97
|
+
|
|
98
|
+
# Get the HTTP method
|
|
99
|
+
method = request.method
|
|
100
|
+
|
|
101
|
+
if method == "GET":
|
|
102
|
+
# Update the query parameters. If testmode or profileId are not present, add them.
|
|
103
|
+
parsed_url = urlparse(str(request.url))
|
|
104
|
+
query_params = parse_qs(parsed_url.query, keep_blank_values=True)
|
|
105
|
+
|
|
106
|
+
# Add profileId if not already present
|
|
107
|
+
if client_profile_id is not None and 'profileId' not in query_params:
|
|
108
|
+
query_params['profileId'] = [client_profile_id]
|
|
109
|
+
|
|
110
|
+
# Add testmode if not already present
|
|
111
|
+
if client_testmode is not None and 'testmode' not in query_params:
|
|
112
|
+
query_params['testmode'] = [str(client_testmode).lower()]
|
|
113
|
+
|
|
114
|
+
# Rebuild the URL with updated query parameters
|
|
115
|
+
new_query = urlencode(query_params, doseq=True)
|
|
116
|
+
new_url = urlunparse((
|
|
117
|
+
parsed_url.scheme,
|
|
118
|
+
parsed_url.netloc,
|
|
119
|
+
parsed_url.path,
|
|
120
|
+
parsed_url.params,
|
|
121
|
+
new_query,
|
|
122
|
+
parsed_url.fragment
|
|
123
|
+
))
|
|
124
|
+
|
|
125
|
+
return Request(
|
|
126
|
+
method=request.method,
|
|
127
|
+
url=new_url,
|
|
128
|
+
headers=request.headers,
|
|
129
|
+
content=request.content,
|
|
130
|
+
extensions=request.extensions
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
# It's POST, DELETE, PATCH
|
|
134
|
+
# Update the JSON body. If testmode or profileId are not present, add them.
|
|
135
|
+
if request.content:
|
|
136
|
+
try:
|
|
137
|
+
body = json.loads(request.content)
|
|
138
|
+
except (json.JSONDecodeError, TypeError):
|
|
139
|
+
# If it's not JSON, return the request unchanged
|
|
140
|
+
return request
|
|
141
|
+
else:
|
|
142
|
+
body = {}
|
|
143
|
+
|
|
144
|
+
# Add profileId if not already present
|
|
145
|
+
if client_profile_id is not None and 'profileId' not in body:
|
|
146
|
+
body['profileId'] = client_profile_id
|
|
147
|
+
|
|
148
|
+
# Add testmode if not already present
|
|
149
|
+
if client_testmode is not None and 'testmode' not in body:
|
|
150
|
+
body['testmode'] = client_testmode
|
|
151
|
+
|
|
152
|
+
# Create a new request with updated body
|
|
153
|
+
new_content = json.dumps(body).encode('utf-8')
|
|
154
|
+
|
|
155
|
+
# Update headers with correct Content-Length
|
|
156
|
+
new_headers = dict(request.headers)
|
|
157
|
+
new_headers['content-length'] = str(len(new_content))
|
|
158
|
+
|
|
159
|
+
return Request(
|
|
160
|
+
method=request.method,
|
|
161
|
+
url=request.url,
|
|
162
|
+
headers=new_headers,
|
|
163
|
+
content=new_content,
|
|
164
|
+
extensions=request.extensions
|
|
165
|
+
)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from .types import Hooks
|
|
2
|
+
|
|
3
|
+
from .mollie_hooks import MollieHooks
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# This file is only ever generated once on the first generation and then is free to be modified.
|
|
7
|
+
# Any hooks you wish to add should be registered in the init_hooks function. Feel free to define them
|
|
8
|
+
# in this file or in separate files in the hooks folder.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def init_hooks(hooks: Hooks):
|
|
12
|
+
# pylint: disable=unused-argument
|
|
13
|
+
"""Add hooks by calling hooks.register{sdk_init/before_request/after_success/after_error}Hook
|
|
14
|
+
with an instance of a hook that implements that specific Hook interface
|
|
15
|
+
Hooks are registered per SDK instance, and are valid for the lifetime of the SDK instance"""
|
|
16
|
+
|
|
17
|
+
mollie_hook = MollieHooks()
|
|
18
|
+
hooks.register_before_request_hook(mollie_hook)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
import httpx
|
|
4
|
+
from .types import (
|
|
5
|
+
SDKInitHook,
|
|
6
|
+
BeforeRequestContext,
|
|
7
|
+
BeforeRequestHook,
|
|
8
|
+
AfterSuccessContext,
|
|
9
|
+
AfterSuccessHook,
|
|
10
|
+
AfterErrorContext,
|
|
11
|
+
AfterErrorHook,
|
|
12
|
+
Hooks,
|
|
13
|
+
)
|
|
14
|
+
from .registration import init_hooks
|
|
15
|
+
from typing import List, Optional, Tuple
|
|
16
|
+
from mollie.httpclient import HttpClient
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class SDKHooks(Hooks):
|
|
20
|
+
def __init__(self) -> None:
|
|
21
|
+
self.sdk_init_hooks: List[SDKInitHook] = []
|
|
22
|
+
self.before_request_hooks: List[BeforeRequestHook] = []
|
|
23
|
+
self.after_success_hooks: List[AfterSuccessHook] = []
|
|
24
|
+
self.after_error_hooks: List[AfterErrorHook] = []
|
|
25
|
+
init_hooks(self)
|
|
26
|
+
|
|
27
|
+
def register_sdk_init_hook(self, hook: SDKInitHook) -> None:
|
|
28
|
+
self.sdk_init_hooks.append(hook)
|
|
29
|
+
|
|
30
|
+
def register_before_request_hook(self, hook: BeforeRequestHook) -> None:
|
|
31
|
+
self.before_request_hooks.append(hook)
|
|
32
|
+
|
|
33
|
+
def register_after_success_hook(self, hook: AfterSuccessHook) -> None:
|
|
34
|
+
self.after_success_hooks.append(hook)
|
|
35
|
+
|
|
36
|
+
def register_after_error_hook(self, hook: AfterErrorHook) -> None:
|
|
37
|
+
self.after_error_hooks.append(hook)
|
|
38
|
+
|
|
39
|
+
def sdk_init(self, base_url: str, client: HttpClient) -> Tuple[str, HttpClient]:
|
|
40
|
+
for hook in self.sdk_init_hooks:
|
|
41
|
+
base_url, client = hook.sdk_init(base_url, client)
|
|
42
|
+
return base_url, client
|
|
43
|
+
|
|
44
|
+
def before_request(
|
|
45
|
+
self, hook_ctx: BeforeRequestContext, request: httpx.Request
|
|
46
|
+
) -> httpx.Request:
|
|
47
|
+
for hook in self.before_request_hooks:
|
|
48
|
+
out = hook.before_request(hook_ctx, request)
|
|
49
|
+
if isinstance(out, Exception):
|
|
50
|
+
raise out
|
|
51
|
+
request = out
|
|
52
|
+
|
|
53
|
+
return request
|
|
54
|
+
|
|
55
|
+
def after_success(
|
|
56
|
+
self, hook_ctx: AfterSuccessContext, response: httpx.Response
|
|
57
|
+
) -> httpx.Response:
|
|
58
|
+
for hook in self.after_success_hooks:
|
|
59
|
+
out = hook.after_success(hook_ctx, response)
|
|
60
|
+
if isinstance(out, Exception):
|
|
61
|
+
raise out
|
|
62
|
+
response = out
|
|
63
|
+
return response
|
|
64
|
+
|
|
65
|
+
def after_error(
|
|
66
|
+
self,
|
|
67
|
+
hook_ctx: AfterErrorContext,
|
|
68
|
+
response: Optional[httpx.Response],
|
|
69
|
+
error: Optional[Exception],
|
|
70
|
+
) -> Tuple[Optional[httpx.Response], Optional[Exception]]:
|
|
71
|
+
for hook in self.after_error_hooks:
|
|
72
|
+
result = hook.after_error(hook_ctx, response, error)
|
|
73
|
+
if isinstance(result, Exception):
|
|
74
|
+
raise result
|
|
75
|
+
response, error = result
|
|
76
|
+
return response, error
|
mollie/_hooks/types.py
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
import httpx
|
|
5
|
+
from mollie.httpclient import HttpClient
|
|
6
|
+
from mollie.sdkconfiguration import SDKConfiguration
|
|
7
|
+
from typing import Any, Callable, List, Optional, Tuple, Union
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class HookContext:
|
|
11
|
+
config: SDKConfiguration
|
|
12
|
+
base_url: str
|
|
13
|
+
operation_id: str
|
|
14
|
+
oauth2_scopes: Optional[List[str]] = None
|
|
15
|
+
security_source: Optional[Union[Any, Callable[[], Any]]] = None
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
config: SDKConfiguration,
|
|
20
|
+
base_url: str,
|
|
21
|
+
operation_id: str,
|
|
22
|
+
oauth2_scopes: Optional[List[str]],
|
|
23
|
+
security_source: Optional[Union[Any, Callable[[], Any]]],
|
|
24
|
+
):
|
|
25
|
+
self.config = config
|
|
26
|
+
self.base_url = base_url
|
|
27
|
+
self.operation_id = operation_id
|
|
28
|
+
self.oauth2_scopes = oauth2_scopes
|
|
29
|
+
self.security_source = security_source
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class BeforeRequestContext(HookContext):
|
|
33
|
+
def __init__(self, hook_ctx: HookContext):
|
|
34
|
+
super().__init__(
|
|
35
|
+
hook_ctx.config,
|
|
36
|
+
hook_ctx.base_url,
|
|
37
|
+
hook_ctx.operation_id,
|
|
38
|
+
hook_ctx.oauth2_scopes,
|
|
39
|
+
hook_ctx.security_source,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AfterSuccessContext(HookContext):
|
|
44
|
+
def __init__(self, hook_ctx: HookContext):
|
|
45
|
+
super().__init__(
|
|
46
|
+
hook_ctx.config,
|
|
47
|
+
hook_ctx.base_url,
|
|
48
|
+
hook_ctx.operation_id,
|
|
49
|
+
hook_ctx.oauth2_scopes,
|
|
50
|
+
hook_ctx.security_source,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class AfterErrorContext(HookContext):
|
|
55
|
+
def __init__(self, hook_ctx: HookContext):
|
|
56
|
+
super().__init__(
|
|
57
|
+
hook_ctx.config,
|
|
58
|
+
hook_ctx.base_url,
|
|
59
|
+
hook_ctx.operation_id,
|
|
60
|
+
hook_ctx.oauth2_scopes,
|
|
61
|
+
hook_ctx.security_source,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class SDKInitHook(ABC):
|
|
66
|
+
@abstractmethod
|
|
67
|
+
def sdk_init(self, base_url: str, client: HttpClient) -> Tuple[str, HttpClient]:
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class BeforeRequestHook(ABC):
|
|
72
|
+
@abstractmethod
|
|
73
|
+
def before_request(
|
|
74
|
+
self, hook_ctx: BeforeRequestContext, request: httpx.Request
|
|
75
|
+
) -> Union[httpx.Request, Exception]:
|
|
76
|
+
pass
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class AfterSuccessHook(ABC):
|
|
80
|
+
@abstractmethod
|
|
81
|
+
def after_success(
|
|
82
|
+
self, hook_ctx: AfterSuccessContext, response: httpx.Response
|
|
83
|
+
) -> Union[httpx.Response, Exception]:
|
|
84
|
+
pass
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class AfterErrorHook(ABC):
|
|
88
|
+
@abstractmethod
|
|
89
|
+
def after_error(
|
|
90
|
+
self,
|
|
91
|
+
hook_ctx: AfterErrorContext,
|
|
92
|
+
response: Optional[httpx.Response],
|
|
93
|
+
error: Optional[Exception],
|
|
94
|
+
) -> Union[Tuple[Optional[httpx.Response], Optional[Exception]], Exception]:
|
|
95
|
+
pass
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class Hooks(ABC):
|
|
99
|
+
@abstractmethod
|
|
100
|
+
def register_sdk_init_hook(self, hook: SDKInitHook):
|
|
101
|
+
pass
|
|
102
|
+
|
|
103
|
+
@abstractmethod
|
|
104
|
+
def register_before_request_hook(self, hook: BeforeRequestHook):
|
|
105
|
+
pass
|
|
106
|
+
|
|
107
|
+
@abstractmethod
|
|
108
|
+
def register_after_success_hook(self, hook: AfterSuccessHook):
|
|
109
|
+
pass
|
|
110
|
+
|
|
111
|
+
@abstractmethod
|
|
112
|
+
def register_after_error_hook(self, hook: AfterErrorHook):
|
|
113
|
+
pass
|
mollie/_version.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
import importlib.metadata
|
|
4
|
+
|
|
5
|
+
__title__: str = "mollie"
|
|
6
|
+
__version__: str = "1.0.0"
|
|
7
|
+
__openapi_doc_version__: str = "1.0.0"
|
|
8
|
+
__gen_version__: str = "2.730.5"
|
|
9
|
+
__user_agent__: str = "speakeasy-sdk/python 1.0.0 2.730.5 1.0.0 mollie"
|
|
10
|
+
|
|
11
|
+
try:
|
|
12
|
+
if __package__ is not None:
|
|
13
|
+
__version__ = importlib.metadata.version(__package__)
|
|
14
|
+
except importlib.metadata.PackageNotFoundError:
|
|
15
|
+
pass
|