From 60ab6ac7d7fcfc5774c44490d3a581593ab6ad55 Mon Sep 17 00:00:00 2001 From: Annie Li Date: Thu, 5 Oct 2023 11:02:14 -0700 Subject: [PATCH 1/8] Bump version to 6.7.0 --- CHANGELOG.md | 5 +++++ VERSION | 2 +- stripe/version.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 347d9a3ff..975910181 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ # Changelog +## 6.7.0 - 2023-10-05 +* [#1065](https://github.com/stripe/stripe-python/pull/1065) Update generated code + * Add support for new resource `Issuing.Token` + * Add support for `list`, `modify`, and `retrieve` methods on resource `Token` + ## 6.6.0 - 2023-09-21 * [#1056](https://github.com/stripe/stripe-python/pull/1056) Update generated code diff --git a/VERSION b/VERSION index 826f5ce03..f0e13c509 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.6.0 +6.7.0 diff --git a/stripe/version.py b/stripe/version.py index 03ef4fc09..f802725a4 100644 --- a/stripe/version.py +++ b/stripe/version.py @@ -1 +1 @@ -VERSION = "6.6.0" +VERSION = "6.7.0" From 2937e4b57b4ff26da17a61c0eca8e78b8cb8336a Mon Sep 17 00:00:00 2001 From: Richard Marmorstein <52928443+richardm-stripe@users.noreply.github.com> Date: Wed, 11 Oct 2023 11:36:15 -0700 Subject: [PATCH 2/8] Better types for search result methods (#1070) --- stripe/api_resources/charge.py | 5 +++-- stripe/api_resources/customer.py | 5 +++-- stripe/api_resources/invoice.py | 5 +++-- stripe/api_resources/payment_intent.py | 5 +++-- stripe/api_resources/price.py | 5 +++-- stripe/api_resources/product.py | 5 +++-- stripe/api_resources/search_result_object.py | 6 ++++-- stripe/api_resources/subscription.py | 5 +++-- 8 files changed, 25 insertions(+), 16 deletions(-) diff --git a/stripe/api_resources/charge.py b/stripe/api_resources/charge.py index 9b1a5f40e..6233ba311 100644 --- a/stripe/api_resources/charge.py +++ b/stripe/api_resources/charge.py @@ -11,6 +11,7 @@ ) from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject +from stripe.api_resources.search_result_object import SearchResultObject from stripe.stripe_object import StripeObject from typing import Any, Dict, Optional, cast from typing_extensions import Literal @@ -191,11 +192,11 @@ def retrieve( return instance @classmethod - def search(cls, *args, **kwargs) -> Any: + def search(cls, *args, **kwargs) -> SearchResultObject["Charge"]: return cls._search(search_url="/v1/charges/search", *args, **kwargs) @classmethod - def search_auto_paging_iter(cls, *args, **kwargs) -> Any: + def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() def mark_as_fraudulent(self, idempotency_key=None): diff --git a/stripe/api_resources/customer.py b/stripe/api_resources/customer.py index e80e5dbcd..af9852184 100644 --- a/stripe/api_resources/customer.py +++ b/stripe/api_resources/customer.py @@ -14,6 +14,7 @@ ) from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject +from stripe.api_resources.search_result_object import SearchResultObject from stripe.stripe_object import StripeObject from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal, Type @@ -295,11 +296,11 @@ def retrieve_payment_method( ) @classmethod - def search(cls, *args, **kwargs) -> Any: + def search(cls, *args, **kwargs) -> SearchResultObject["Customer"]: return cls._search(search_url="/v1/customers/search", *args, **kwargs) @classmethod - def search_auto_paging_iter(cls, *args, **kwargs) -> Any: + def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() @classmethod diff --git a/stripe/api_resources/invoice.py b/stripe/api_resources/invoice.py index 3e2461cd1..331f8536e 100644 --- a/stripe/api_resources/invoice.py +++ b/stripe/api_resources/invoice.py @@ -12,6 +12,7 @@ ) from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject +from stripe.api_resources.search_result_object import SearchResultObject from stripe.stripe_object import StripeObject from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal @@ -451,9 +452,9 @@ def void_invoice( ) @classmethod - def search(cls, *args, **kwargs) -> Any: + def search(cls, *args, **kwargs) -> SearchResultObject["Invoice"]: return cls._search(search_url="/v1/invoices/search", *args, **kwargs) @classmethod - def search_auto_paging_iter(cls, *args, **kwargs) -> Any: + def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() diff --git a/stripe/api_resources/payment_intent.py b/stripe/api_resources/payment_intent.py index 4f88816b8..5913cf232 100644 --- a/stripe/api_resources/payment_intent.py +++ b/stripe/api_resources/payment_intent.py @@ -11,6 +11,7 @@ ) from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject +from stripe.api_resources.search_result_object import SearchResultObject from stripe.stripe_object import StripeObject from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal @@ -364,11 +365,11 @@ def verify_microdeposits( ) @classmethod - def search(cls, *args, **kwargs) -> Any: + def search(cls, *args, **kwargs) -> SearchResultObject["PaymentIntent"]: return cls._search( search_url="/v1/payment_intents/search", *args, **kwargs ) @classmethod - def search_auto_paging_iter(cls, *args, **kwargs) -> Any: + def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() diff --git a/stripe/api_resources/price.py b/stripe/api_resources/price.py index 5101117c2..a0d3e2ecc 100644 --- a/stripe/api_resources/price.py +++ b/stripe/api_resources/price.py @@ -10,6 +10,7 @@ ) from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject +from stripe.api_resources.search_result_object import SearchResultObject from stripe.stripe_object import StripeObject from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal @@ -124,9 +125,9 @@ def retrieve( return instance @classmethod - def search(cls, *args, **kwargs) -> Any: + def search(cls, *args, **kwargs) -> SearchResultObject["Price"]: return cls._search(search_url="/v1/prices/search", *args, **kwargs) @classmethod - def search_auto_paging_iter(cls, *args, **kwargs) -> Any: + def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() diff --git a/stripe/api_resources/product.py b/stripe/api_resources/product.py index 7eee8b070..54543a6a3 100644 --- a/stripe/api_resources/product.py +++ b/stripe/api_resources/product.py @@ -12,6 +12,7 @@ ) from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject +from stripe.api_resources.search_result_object import SearchResultObject from stripe.stripe_object import StripeObject from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal @@ -144,9 +145,9 @@ def retrieve( return instance @classmethod - def search(cls, *args, **kwargs) -> Any: + def search(cls, *args, **kwargs) -> SearchResultObject["Product"]: return cls._search(search_url="/v1/products/search", *args, **kwargs) @classmethod - def search_auto_paging_iter(cls, *args, **kwargs) -> Any: + def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() diff --git a/stripe/api_resources/search_result_object.py b/stripe/api_resources/search_result_object.py index a1c3ec752..9b6dd196a 100644 --- a/stripe/api_resources/search_result_object.py +++ b/stripe/api_resources/search_result_object.py @@ -1,11 +1,13 @@ from __future__ import absolute_import, division, print_function from typing_extensions import Self -from typing import List +from typing import Generic, List, TypeVar from stripe.stripe_object import StripeObject +T = TypeVar("T", bound=StripeObject) -class SearchResultObject(StripeObject): + +class SearchResultObject(StripeObject, Generic[T]): OBJECT_NAME = "search_result" data: List[StripeObject] has_more: bool diff --git a/stripe/api_resources/subscription.py b/stripe/api_resources/subscription.py index 7f7b85ed1..d7717d860 100644 --- a/stripe/api_resources/subscription.py +++ b/stripe/api_resources/subscription.py @@ -12,6 +12,7 @@ ) from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject +from stripe.api_resources.search_result_object import SearchResultObject from stripe.stripe_object import StripeObject from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal @@ -263,11 +264,11 @@ def retrieve( return instance @classmethod - def search(cls, *args, **kwargs) -> Any: + def search(cls, *args, **kwargs) -> SearchResultObject["Subscription"]: return cls._search( search_url="/v1/subscriptions/search", *args, **kwargs ) @classmethod - def search_auto_paging_iter(cls, *args, **kwargs) -> Any: + def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() From 362f55167e4b6e1e2cb37bbef793285fc23b0682 Mon Sep 17 00:00:00 2001 From: anniel-stripe <97691964+anniel-stripe@users.noreply.github.com> Date: Wed, 11 Oct 2023 11:54:22 -0700 Subject: [PATCH 3/8] Remove `__future__` imports and use generated sections in `object_classes.py` (#1069) * Use generated section in object classes file * Remove generated __future__ imports * Remove manual __future__ imports * Business objects -> Object classes * regenerate --- examples/charge.py | 2 -- examples/oauth.py | 2 -- examples/proxy.py | 2 -- examples/webhooks.py | 2 -- stripe/__init__.py | 1 - stripe/api_requestor.py | 2 -- stripe/api_resources/__init__.py | 2 -- stripe/api_resources/abstract/__init__.py | 2 -- stripe/api_resources/abstract/api_resource.py | 1 - stripe/api_resources/abstract/createable_api_resource.py | 2 -- stripe/api_resources/abstract/custom_method.py | 2 -- stripe/api_resources/abstract/deletable_api_resource.py | 2 -- stripe/api_resources/abstract/listable_api_resource.py | 2 -- .../api_resources/abstract/nested_resource_class_methods.py | 2 -- stripe/api_resources/abstract/searchable_api_resource.py | 2 -- stripe/api_resources/abstract/singleton_api_resource.py | 2 -- stripe/api_resources/abstract/test_helpers.py | 2 -- stripe/api_resources/abstract/updateable_api_resource.py | 2 -- stripe/api_resources/abstract/verify_mixin.py | 2 -- stripe/api_resources/account.py | 2 -- stripe/api_resources/account_link.py | 2 -- stripe/api_resources/account_session.py | 2 -- stripe/api_resources/apple_pay_domain.py | 2 -- stripe/api_resources/application.py | 2 -- stripe/api_resources/application_fee.py | 2 -- stripe/api_resources/application_fee_refund.py | 2 -- stripe/api_resources/apps/__init__.py | 2 -- stripe/api_resources/apps/secret.py | 2 -- stripe/api_resources/balance.py | 2 -- stripe/api_resources/balance_transaction.py | 2 -- stripe/api_resources/bank_account.py | 2 -- stripe/api_resources/billing_portal/__init__.py | 2 -- stripe/api_resources/billing_portal/configuration.py | 2 -- stripe/api_resources/billing_portal/session.py | 2 -- stripe/api_resources/capability.py | 2 -- stripe/api_resources/card.py | 2 -- stripe/api_resources/cash_balance.py | 2 -- stripe/api_resources/charge.py | 2 -- stripe/api_resources/checkout/__init__.py | 2 -- stripe/api_resources/checkout/session.py | 2 -- stripe/api_resources/connect_collection_transfer.py | 2 -- stripe/api_resources/country_spec.py | 2 -- stripe/api_resources/coupon.py | 2 -- stripe/api_resources/credit_note.py | 2 -- stripe/api_resources/credit_note_line_item.py | 2 -- stripe/api_resources/customer.py | 2 -- stripe/api_resources/customer_balance_transaction.py | 2 -- stripe/api_resources/customer_cash_balance_transaction.py | 2 -- stripe/api_resources/discount.py | 2 -- stripe/api_resources/dispute.py | 2 -- stripe/api_resources/ephemeral_key.py | 2 -- stripe/api_resources/error_object.py | 2 -- stripe/api_resources/event.py | 2 -- stripe/api_resources/exchange_rate.py | 2 -- stripe/api_resources/file.py | 2 -- stripe/api_resources/file_link.py | 2 -- stripe/api_resources/financial_connections/__init__.py | 2 -- stripe/api_resources/financial_connections/account.py | 2 -- stripe/api_resources/financial_connections/account_owner.py | 2 -- .../financial_connections/account_ownership.py | 2 -- stripe/api_resources/financial_connections/session.py | 2 -- stripe/api_resources/funding_instructions.py | 2 -- stripe/api_resources/identity/__init__.py | 2 -- stripe/api_resources/identity/verification_report.py | 2 -- stripe/api_resources/identity/verification_session.py | 2 -- stripe/api_resources/invoice.py | 2 -- stripe/api_resources/invoice_item.py | 2 -- stripe/api_resources/invoice_line_item.py | 2 -- stripe/api_resources/issuing/__init__.py | 2 -- stripe/api_resources/issuing/authorization.py | 2 -- stripe/api_resources/issuing/card.py | 2 -- stripe/api_resources/issuing/cardholder.py | 2 -- stripe/api_resources/issuing/dispute.py | 2 -- stripe/api_resources/issuing/token.py | 2 -- stripe/api_resources/issuing/transaction.py | 2 -- stripe/api_resources/line_item.py | 2 -- stripe/api_resources/list_object.py | 1 - stripe/api_resources/login_link.py | 2 -- stripe/api_resources/mandate.py | 2 -- stripe/api_resources/payment_intent.py | 2 -- stripe/api_resources/payment_link.py | 2 -- stripe/api_resources/payment_method.py | 2 -- stripe/api_resources/payment_method_configuration.py | 2 -- stripe/api_resources/payment_method_domain.py | 2 -- stripe/api_resources/payout.py | 2 -- stripe/api_resources/person.py | 2 -- stripe/api_resources/plan.py | 2 -- stripe/api_resources/platform_tax_fee.py | 2 -- stripe/api_resources/price.py | 2 -- stripe/api_resources/product.py | 2 -- stripe/api_resources/promotion_code.py | 2 -- stripe/api_resources/quote.py | 2 -- stripe/api_resources/radar/__init__.py | 2 -- stripe/api_resources/radar/early_fraud_warning.py | 2 -- stripe/api_resources/radar/value_list.py | 2 -- stripe/api_resources/radar/value_list_item.py | 2 -- stripe/api_resources/recipient_transfer.py | 2 -- stripe/api_resources/refund.py | 2 -- stripe/api_resources/reporting/__init__.py | 2 -- stripe/api_resources/reporting/report_run.py | 2 -- stripe/api_resources/reporting/report_type.py | 2 -- stripe/api_resources/reserve_transaction.py | 2 -- stripe/api_resources/reversal.py | 2 -- stripe/api_resources/review.py | 2 -- stripe/api_resources/search_result_object.py | 1 - stripe/api_resources/setup_attempt.py | 2 -- stripe/api_resources/setup_intent.py | 2 -- stripe/api_resources/shipping_rate.py | 2 -- stripe/api_resources/sigma/__init__.py | 2 -- stripe/api_resources/sigma/scheduled_query_run.py | 2 -- stripe/api_resources/source.py | 2 -- stripe/api_resources/source_mandate_notification.py | 2 -- stripe/api_resources/source_transaction.py | 2 -- stripe/api_resources/subscription.py | 2 -- stripe/api_resources/subscription_item.py | 2 -- stripe/api_resources/subscription_schedule.py | 2 -- stripe/api_resources/tax/__init__.py | 2 -- stripe/api_resources/tax/calculation.py | 2 -- stripe/api_resources/tax/calculation_line_item.py | 2 -- stripe/api_resources/tax/settings.py | 2 -- stripe/api_resources/tax/transaction.py | 2 -- stripe/api_resources/tax/transaction_line_item.py | 2 -- stripe/api_resources/tax_code.py | 2 -- stripe/api_resources/tax_deducted_at_source.py | 2 -- stripe/api_resources/tax_id.py | 2 -- stripe/api_resources/tax_rate.py | 2 -- stripe/api_resources/terminal/__init__.py | 2 -- stripe/api_resources/terminal/configuration.py | 2 -- stripe/api_resources/terminal/connection_token.py | 2 -- stripe/api_resources/terminal/location.py | 2 -- stripe/api_resources/terminal/reader.py | 2 -- stripe/api_resources/test_helpers/__init__.py | 2 -- stripe/api_resources/test_helpers/test_clock.py | 2 -- stripe/api_resources/token.py | 2 -- stripe/api_resources/topup.py | 2 -- stripe/api_resources/transfer.py | 2 -- stripe/api_resources/treasury/__init__.py | 2 -- stripe/api_resources/treasury/credit_reversal.py | 2 -- stripe/api_resources/treasury/debit_reversal.py | 2 -- stripe/api_resources/treasury/financial_account.py | 2 -- stripe/api_resources/treasury/financial_account_features.py | 2 -- stripe/api_resources/treasury/inbound_transfer.py | 2 -- stripe/api_resources/treasury/outbound_payment.py | 2 -- stripe/api_resources/treasury/outbound_transfer.py | 2 -- stripe/api_resources/treasury/received_credit.py | 2 -- stripe/api_resources/treasury/received_debit.py | 2 -- stripe/api_resources/treasury/transaction.py | 2 -- stripe/api_resources/treasury/transaction_entry.py | 2 -- stripe/api_resources/usage_record.py | 2 -- stripe/api_resources/usage_record_summary.py | 2 -- stripe/api_resources/webhook_endpoint.py | 2 -- stripe/error.py | 2 -- stripe/http_client.py | 2 -- stripe/multipart_data_generator.py | 2 -- stripe/oauth.py | 2 -- stripe/oauth_error.py | 2 -- stripe/object_classes.py | 6 ++---- stripe/request_metrics.py | 3 --- stripe/stripe_object.py | 2 -- stripe/stripe_response.py | 2 -- stripe/util.py | 2 -- stripe/webhook.py | 2 -- tests/api_resources/abstract/test_api_resource.py | 2 -- .../api_resources/abstract/test_createable_api_resource.py | 2 -- tests/api_resources/abstract/test_custom_method.py | 2 -- tests/api_resources/abstract/test_deletable_api_resource.py | 2 -- tests/api_resources/abstract/test_listable_api_resource.py | 2 -- .../abstract/test_nested_resource_class_methods.py | 2 -- .../api_resources/abstract/test_searchable_api_resource.py | 2 -- tests/api_resources/abstract/test_singleton_api_resource.py | 2 -- .../abstract/test_test_helpers_api_resource.py | 2 -- .../api_resources/abstract/test_updateable_api_resource.py | 2 -- tests/api_resources/billing_portal/test_configuration.py | 2 -- tests/api_resources/billing_portal/test_session.py | 2 -- tests/api_resources/checkout/test_session.py | 2 -- tests/api_resources/identity/test_verification_report.py | 2 -- tests/api_resources/identity/test_verification_session.py | 2 -- tests/api_resources/issuing/test_authorization.py | 2 -- tests/api_resources/issuing/test_card.py | 2 -- tests/api_resources/issuing/test_cardholder.py | 2 -- tests/api_resources/issuing/test_dispute.py | 2 -- tests/api_resources/issuing/test_transaction.py | 2 -- tests/api_resources/radar/test_early_fraud_warning.py | 2 -- tests/api_resources/radar/test_value_list.py | 2 -- tests/api_resources/radar/test_value_list_item.py | 2 -- tests/api_resources/reporting/test_report_run.py | 2 -- tests/api_resources/reporting/test_report_type.py | 2 -- tests/api_resources/sigma/test_scheduled_query_run.py | 2 -- tests/api_resources/terminal/test_connection_token.py | 2 -- tests/api_resources/terminal/test_location.py | 2 -- tests/api_resources/terminal/test_reader.py | 2 -- tests/api_resources/test_account.py | 2 -- tests/api_resources/test_account_link.py | 2 -- tests/api_resources/test_apple_pay_domain.py | 2 -- tests/api_resources/test_application_fee.py | 2 -- tests/api_resources/test_application_fee_refund.py | 2 -- tests/api_resources/test_balance.py | 2 -- tests/api_resources/test_balance_transaction.py | 2 -- tests/api_resources/test_bank_account.py | 2 -- tests/api_resources/test_capability.py | 2 -- tests/api_resources/test_card.py | 2 -- tests/api_resources/test_charge.py | 2 -- tests/api_resources/test_country_spec.py | 2 -- tests/api_resources/test_coupon.py | 2 -- tests/api_resources/test_credit_note.py | 2 -- tests/api_resources/test_customer.py | 2 -- tests/api_resources/test_customer_balance_transaction.py | 2 -- tests/api_resources/test_dispute.py | 2 -- tests/api_resources/test_ephemeral_key.py | 2 -- tests/api_resources/test_event.py | 2 -- tests/api_resources/test_exchange_rate.py | 2 -- tests/api_resources/test_file.py | 2 -- tests/api_resources/test_file_link.py | 2 -- tests/api_resources/test_file_upload.py | 2 -- tests/api_resources/test_invoice.py | 2 -- tests/api_resources/test_invoice_item.py | 2 -- tests/api_resources/test_invoice_line_item.py | 2 -- tests/api_resources/test_list_object.py | 2 -- tests/api_resources/test_mandate.py | 2 -- tests/api_resources/test_payment_intent.py | 2 -- tests/api_resources/test_payment_method.py | 2 -- tests/api_resources/test_payout.py | 2 -- tests/api_resources/test_person.py | 2 -- tests/api_resources/test_plan.py | 2 -- tests/api_resources/test_price.py | 2 -- tests/api_resources/test_product.py | 2 -- tests/api_resources/test_promotion_code.py | 2 -- tests/api_resources/test_quote.py | 2 -- tests/api_resources/test_refund.py | 2 -- tests/api_resources/test_reversal.py | 2 -- tests/api_resources/test_review.py | 2 -- tests/api_resources/test_search_result_object.py | 2 -- tests/api_resources/test_setup_attempt.py | 2 -- tests/api_resources/test_setup_intent.py | 2 -- tests/api_resources/test_source.py | 2 -- tests/api_resources/test_source_transaction.py | 2 -- tests/api_resources/test_subscription.py | 2 -- tests/api_resources/test_subscription_item.py | 2 -- tests/api_resources/test_subscription_schedule.py | 2 -- tests/api_resources/test_tax_code.py | 2 -- tests/api_resources/test_tax_id.py | 2 -- tests/api_resources/test_tax_rate.py | 2 -- tests/api_resources/test_topup.py | 2 -- tests/api_resources/test_transfer.py | 2 -- tests/api_resources/test_usage_record.py | 2 -- tests/api_resources/test_usage_record_summary.py | 2 -- tests/api_resources/test_webhook_endpoint.py | 2 -- tests/conftest.py | 2 -- tests/request_mock.py | 2 -- tests/stripe_mock.py | 2 -- tests/test_api_requestor.py | 2 -- tests/test_error.py | 1 - tests/test_http_client.py | 2 -- tests/test_integration.py | 2 -- tests/test_multipart_data_generator.py | 1 - tests/test_oauth.py | 2 -- tests/test_oauth_error.py | 1 - tests/test_stripe_object.py | 2 -- tests/test_stripe_response.py | 2 -- tests/test_util.py | 2 -- tests/test_webhook.py | 2 -- 261 files changed, 2 insertions(+), 518 deletions(-) diff --git a/examples/charge.py b/examples/charge.py index ffbb7d14f..0bb8230c7 100644 --- a/examples/charge.py +++ b/examples/charge.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import os import stripe diff --git a/examples/oauth.py b/examples/oauth.py index 722c5128a..b7ffc3881 100644 --- a/examples/oauth.py +++ b/examples/oauth.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import os import stripe diff --git a/examples/proxy.py b/examples/proxy.py index 7501701bc..9031de4b9 100644 --- a/examples/proxy.py +++ b/examples/proxy.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import os import stripe diff --git a/examples/webhooks.py b/examples/webhooks.py index 9fd8403fa..23ea538bd 100644 --- a/examples/webhooks.py +++ b/examples/webhooks.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import os import stripe diff --git a/stripe/__init__.py b/stripe/__init__.py index 669fea982..5c5f8a515 100644 --- a/stripe/__init__.py +++ b/stripe/__init__.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import, division, print_function from typing_extensions import Literal from typing import Union, Optional diff --git a/stripe/api_requestor.py b/stripe/api_requestor.py index ade8bac51..09b68f6be 100644 --- a/stripe/api_requestor.py +++ b/stripe/api_requestor.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import calendar import datetime import json diff --git a/stripe/api_resources/__init__.py b/stripe/api_resources/__init__.py index a0a8e56ff..e343e3634 100644 --- a/stripe/api_resources/__init__.py +++ b/stripe/api_resources/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from . import abstract diff --git a/stripe/api_resources/abstract/__init__.py b/stripe/api_resources/abstract/__init__.py index 7f333cf28..b8886cf4d 100644 --- a/stripe/api_resources/abstract/__init__.py +++ b/stripe/api_resources/abstract/__init__.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.abstract.api_resource import APIResource diff --git a/stripe/api_resources/abstract/api_resource.py b/stripe/api_resources/abstract/api_resource.py index 7e8bd7b7c..f9dc2dd46 100644 --- a/stripe/api_resources/abstract/api_resource.py +++ b/stripe/api_resources/abstract/api_resource.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import, division, print_function from typing_extensions import Literal from stripe import api_requestor, error, util diff --git a/stripe/api_resources/abstract/createable_api_resource.py b/stripe/api_resources/abstract/createable_api_resource.py index 35b017948..cd78809ca 100644 --- a/stripe/api_resources/abstract/createable_api_resource.py +++ b/stripe/api_resources/abstract/createable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract.api_resource import APIResource from typing import TypeVar, cast from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/abstract/custom_method.py b/stripe/api_resources/abstract/custom_method.py index 3983bbc66..8ee1fdd60 100644 --- a/stripe/api_resources/abstract/custom_method.py +++ b/stripe/api_resources/abstract/custom_method.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe import util from urllib.parse import quote_plus diff --git a/stripe/api_resources/abstract/deletable_api_resource.py b/stripe/api_resources/abstract/deletable_api_resource.py index 8ed8d1fdf..cffb4b0e4 100644 --- a/stripe/api_resources/abstract/deletable_api_resource.py +++ b/stripe/api_resources/abstract/deletable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract.api_resource import APIResource from urllib.parse import quote_plus diff --git a/stripe/api_resources/abstract/listable_api_resource.py b/stripe/api_resources/abstract/listable_api_resource.py index 50af567e5..7e6416a08 100644 --- a/stripe/api_resources/abstract/listable_api_resource.py +++ b/stripe/api_resources/abstract/listable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract.api_resource import APIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/abstract/nested_resource_class_methods.py b/stripe/api_resources/abstract/nested_resource_class_methods.py index 6a062d940..bf9a55a98 100644 --- a/stripe/api_resources/abstract/nested_resource_class_methods.py +++ b/stripe/api_resources/abstract/nested_resource_class_methods.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from urllib.parse import quote_plus from stripe.api_resources.abstract import APIResource diff --git a/stripe/api_resources/abstract/searchable_api_resource.py b/stripe/api_resources/abstract/searchable_api_resource.py index f32e62b3b..ce81553fb 100644 --- a/stripe/api_resources/abstract/searchable_api_resource.py +++ b/stripe/api_resources/abstract/searchable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract.api_resource import APIResource from stripe.api_resources.search_result_object import SearchResultObject from typing import TypeVar diff --git a/stripe/api_resources/abstract/singleton_api_resource.py b/stripe/api_resources/abstract/singleton_api_resource.py index 9f2124982..89e00f81e 100644 --- a/stripe/api_resources/abstract/singleton_api_resource.py +++ b/stripe/api_resources/abstract/singleton_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract.api_resource import APIResource from typing import TypeVar diff --git a/stripe/api_resources/abstract/test_helpers.py b/stripe/api_resources/abstract/test_helpers.py index f718963fa..47197f08f 100644 --- a/stripe/api_resources/abstract/test_helpers.py +++ b/stripe/api_resources/abstract/test_helpers.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe import error from urllib.parse import quote_plus diff --git a/stripe/api_resources/abstract/updateable_api_resource.py b/stripe/api_resources/abstract/updateable_api_resource.py index 382a0a5e1..3284176f2 100644 --- a/stripe/api_resources/abstract/updateable_api_resource.py +++ b/stripe/api_resources/abstract/updateable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract.api_resource import APIResource from urllib.parse import quote_plus diff --git a/stripe/api_resources/abstract/verify_mixin.py b/stripe/api_resources/abstract/verify_mixin.py index fae631f8b..98aaaef93 100644 --- a/stripe/api_resources/abstract/verify_mixin.py +++ b/stripe/api_resources/abstract/verify_mixin.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from typing import Optional, Any, Dict from typing_extensions import Protocol diff --git a/stripe/api_resources/account.py b/stripe/api_resources/account.py index c2efc524c..ad5b42697 100644 --- a/stripe/api_resources/account.py +++ b/stripe/api_resources/account.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import api_resources, oauth, util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/account_link.py b/stripe/api_resources/account_link.py index a06052e29..c1e987bbf 100644 --- a/stripe/api_resources/account_link.py +++ b/stripe/api_resources/account_link.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import CreateableAPIResource from typing import Any, Optional, cast from typing_extensions import Literal diff --git a/stripe/api_resources/account_session.py b/stripe/api_resources/account_session.py index fc7d15231..c15f10c14 100644 --- a/stripe/api_resources/account_session.py +++ b/stripe/api_resources/account_session.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import CreateableAPIResource from stripe.stripe_object import StripeObject from typing import Any, Optional, cast diff --git a/stripe/api_resources/apple_pay_domain.py b/stripe/api_resources/apple_pay_domain.py index 765a62d42..de3ccd34c 100644 --- a/stripe/api_resources/apple_pay_domain.py +++ b/stripe/api_resources/apple_pay_domain.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/application.py b/stripe/api_resources/application.py index 3d39dd43e..ceeaa5dc7 100644 --- a/stripe/api_resources/application.py +++ b/stripe/api_resources/application.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import Optional from typing_extensions import Literal diff --git a/stripe/api_resources/application_fee.py b/stripe/api_resources/application_fee.py index ee7aa86d4..0b828c1d2 100644 --- a/stripe/api_resources/application_fee.py +++ b/stripe/api_resources/application_fee.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( ListableAPIResource, diff --git a/stripe/api_resources/application_fee_refund.py b/stripe/api_resources/application_fee_refund.py index 0f578fcc0..be5e505d3 100644 --- a/stripe/api_resources/application_fee_refund.py +++ b/stripe/api_resources/application_fee_refund.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import UpdateableAPIResource from stripe.api_resources.application_fee import ApplicationFee from stripe.api_resources.expandable_field import ExpandableField diff --git a/stripe/api_resources/apps/__init__.py b/stripe/api_resources/apps/__init__.py index de5ec20cb..8c9136a98 100644 --- a/stripe/api_resources/apps/__init__.py +++ b/stripe/api_resources/apps/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.apps.secret import Secret diff --git a/stripe/api_resources/apps/secret.py b/stripe/api_resources/apps/secret.py index 39d130d89..431b2da8b 100644 --- a/stripe/api_resources/apps/secret.py +++ b/stripe/api_resources/apps/secret.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/balance.py b/stripe/api_resources/balance.py index c528862ff..0293e1f05 100644 --- a/stripe/api_resources/balance.py +++ b/stripe/api_resources/balance.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import SingletonAPIResource from stripe.stripe_object import StripeObject from typing import Any, List, Optional diff --git a/stripe/api_resources/balance_transaction.py b/stripe/api_resources/balance_transaction.py index 3d28db343..e74303fa7 100644 --- a/stripe/api_resources/balance_transaction.py +++ b/stripe/api_resources/balance_transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject diff --git a/stripe/api_resources/bank_account.py b/stripe/api_resources/bank_account.py index cfebefb5d..5b750fd99 100644 --- a/stripe/api_resources/bank_account.py +++ b/stripe/api_resources/bank_account.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import error, util from stripe.api_resources.abstract import ( DeletableAPIResource, diff --git a/stripe/api_resources/billing_portal/__init__.py b/stripe/api_resources/billing_portal/__init__.py index ed71c9b8a..4a067811e 100644 --- a/stripe/api_resources/billing_portal/__init__.py +++ b/stripe/api_resources/billing_portal/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.billing_portal.configuration import Configuration diff --git a/stripe/api_resources/billing_portal/configuration.py b/stripe/api_resources/billing_portal/configuration.py index d396bf962..8daf3e369 100644 --- a/stripe/api_resources/billing_portal/configuration.py +++ b/stripe/api_resources/billing_portal/configuration.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/billing_portal/session.py b/stripe/api_resources/billing_portal/session.py index 30659715d..114f68c84 100644 --- a/stripe/api_resources/billing_portal/session.py +++ b/stripe/api_resources/billing_portal/session.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/capability.py b/stripe/api_resources/capability.py index c31e906a0..24ddd9688 100644 --- a/stripe/api_resources/capability.py +++ b/stripe/api_resources/capability.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import UpdateableAPIResource from stripe.api_resources.account import Account from stripe.api_resources.expandable_field import ExpandableField diff --git a/stripe/api_resources/card.py b/stripe/api_resources/card.py index a01206129..8b2037fe0 100644 --- a/stripe/api_resources/card.py +++ b/stripe/api_resources/card.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import error, util from stripe.api_resources.abstract import ( DeletableAPIResource, diff --git a/stripe/api_resources/cash_balance.py b/stripe/api_resources/cash_balance.py index 034e39f48..5773ad1d6 100644 --- a/stripe/api_resources/cash_balance.py +++ b/stripe/api_resources/cash_balance.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.customer import Customer from stripe.stripe_object import StripeObject from typing import Dict, Optional diff --git a/stripe/api_resources/charge.py b/stripe/api_resources/charge.py index 6233ba311..19ce92228 100644 --- a/stripe/api_resources/charge.py +++ b/stripe/api_resources/charge.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/checkout/__init__.py b/stripe/api_resources/checkout/__init__.py index 30631a710..6800248a9 100644 --- a/stripe/api_resources/checkout/__init__.py +++ b/stripe/api_resources/checkout/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.checkout.session import Session diff --git a/stripe/api_resources/checkout/session.py b/stripe/api_resources/checkout/session.py index d1bf4e84e..a0076d6d8 100644 --- a/stripe/api_resources/checkout/session.py +++ b/stripe/api_resources/checkout/session.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/connect_collection_transfer.py b/stripe/api_resources/connect_collection_transfer.py index ffe14e3b4..d67909bc4 100644 --- a/stripe/api_resources/connect_collection_transfer.py +++ b/stripe/api_resources/connect_collection_transfer.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject from typing_extensions import Literal diff --git a/stripe/api_resources/country_spec.py b/stripe/api_resources/country_spec.py index ac24bcf85..cfd3d03f0 100644 --- a/stripe/api_resources/country_spec.py +++ b/stripe/api_resources/country_spec.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/coupon.py b/stripe/api_resources/coupon.py index 33406c610..9e9c83412 100644 --- a/stripe/api_resources/coupon.py +++ b/stripe/api_resources/coupon.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/credit_note.py b/stripe/api_resources/credit_note.py index c2037ca28..8bae8d452 100644 --- a/stripe/api_resources/credit_note.py +++ b/stripe/api_resources/credit_note.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/credit_note_line_item.py b/stripe/api_resources/credit_note_line_item.py index 24fc50629..f7d1abca6 100644 --- a/stripe/api_resources/credit_note_line_item.py +++ b/stripe/api_resources/credit_note_line_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/customer.py b/stripe/api_resources/customer.py index af9852184..da4e9e1b2 100644 --- a/stripe/api_resources/customer.py +++ b/stripe/api_resources/customer.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/customer_balance_transaction.py b/stripe/api_resources/customer_balance_transaction.py index 7a1a2f0c6..15a424110 100644 --- a/stripe/api_resources/customer_balance_transaction.py +++ b/stripe/api_resources/customer_balance_transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import APIResource from stripe.api_resources.customer import Customer from stripe.api_resources.expandable_field import ExpandableField diff --git a/stripe/api_resources/customer_cash_balance_transaction.py b/stripe/api_resources/customer_cash_balance_transaction.py index d5101a86a..4b1ca71fb 100644 --- a/stripe/api_resources/customer_cash_balance_transaction.py +++ b/stripe/api_resources/customer_cash_balance_transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject diff --git a/stripe/api_resources/discount.py b/stripe/api_resources/discount.py index bb82c3500..3dc694091 100644 --- a/stripe/api_resources/discount.py +++ b/stripe/api_resources/discount.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject from typing import Optional diff --git a/stripe/api_resources/dispute.py b/stripe/api_resources/dispute.py index 5f9a3c04e..3cee58616 100644 --- a/stripe/api_resources/dispute.py +++ b/stripe/api_resources/dispute.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( ListableAPIResource, diff --git a/stripe/api_resources/ephemeral_key.py b/stripe/api_resources/ephemeral_key.py index f9ee9c115..ad25c2a60 100644 --- a/stripe/api_resources/ephemeral_key.py +++ b/stripe/api_resources/ephemeral_key.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import api_requestor, util from stripe.api_resources.abstract import DeletableAPIResource from typing import Any, Optional, cast diff --git a/stripe/api_resources/error_object.py b/stripe/api_resources/error_object.py index 80aa87b6d..21249655d 100644 --- a/stripe/api_resources/error_object.py +++ b/stripe/api_resources/error_object.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe.util import merge_dicts from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/event.py b/stripe/api_resources/event.py index 9c3f51026..4008e2dda 100644 --- a/stripe/api_resources/event.py +++ b/stripe/api_resources/event.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/exchange_rate.py b/stripe/api_resources/exchange_rate.py index f20ccbc8e..890574e1a 100644 --- a/stripe/api_resources/exchange_rate.py +++ b/stripe/api_resources/exchange_rate.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from typing import Any, Dict, Optional diff --git a/stripe/api_resources/file.py b/stripe/api_resources/file.py index 0a1ce419c..80b194b0a 100644 --- a/stripe/api_resources/file.py +++ b/stripe/api_resources/file.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - import stripe from stripe import api_requestor, util from stripe.api_resources.abstract import ListableAPIResource diff --git a/stripe/api_resources/file_link.py b/stripe/api_resources/file_link.py index 52e95739a..e2cfe9a5c 100644 --- a/stripe/api_resources/file_link.py +++ b/stripe/api_resources/file_link.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/financial_connections/__init__.py b/stripe/api_resources/financial_connections/__init__.py index e593571f2..38c6cf674 100644 --- a/stripe/api_resources/financial_connections/__init__.py +++ b/stripe/api_resources/financial_connections/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.financial_connections.account import Account diff --git a/stripe/api_resources/financial_connections/account.py b/stripe/api_resources/financial_connections/account.py index 37d60c308..b647891b6 100644 --- a/stripe/api_resources/financial_connections/account.py +++ b/stripe/api_resources/financial_connections/account.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField diff --git a/stripe/api_resources/financial_connections/account_owner.py b/stripe/api_resources/financial_connections/account_owner.py index b27f88426..a771044f4 100644 --- a/stripe/api_resources/financial_connections/account_owner.py +++ b/stripe/api_resources/financial_connections/account_owner.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import Optional from typing_extensions import Literal diff --git a/stripe/api_resources/financial_connections/account_ownership.py b/stripe/api_resources/financial_connections/account_ownership.py index d002b05f3..25fbac324 100644 --- a/stripe/api_resources/financial_connections/account_ownership.py +++ b/stripe/api_resources/financial_connections/account_ownership.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject from typing_extensions import Literal diff --git a/stripe/api_resources/financial_connections/session.py b/stripe/api_resources/financial_connections/session.py index 07282108c..793b74a78 100644 --- a/stripe/api_resources/financial_connections/session.py +++ b/stripe/api_resources/financial_connections/session.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/funding_instructions.py b/stripe/api_resources/funding_instructions.py index a82039c68..2d72e2e30 100644 --- a/stripe/api_resources/funding_instructions.py +++ b/stripe/api_resources/funding_instructions.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing_extensions import Literal diff --git a/stripe/api_resources/identity/__init__.py b/stripe/api_resources/identity/__init__.py index 5a548d053..deb485052 100644 --- a/stripe/api_resources/identity/__init__.py +++ b/stripe/api_resources/identity/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.identity.verification_report import ( diff --git a/stripe/api_resources/identity/verification_report.py b/stripe/api_resources/identity/verification_report.py index b3b6bb4ef..c913fedb3 100644 --- a/stripe/api_resources/identity/verification_report.py +++ b/stripe/api_resources/identity/verification_report.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/identity/verification_session.py b/stripe/api_resources/identity/verification_session.py index 0d04b3eea..9f5e09aba 100644 --- a/stripe/api_resources/identity/verification_session.py +++ b/stripe/api_resources/identity/verification_session.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/invoice.py b/stripe/api_resources/invoice.py index 331f8536e..44e0e319b 100644 --- a/stripe/api_resources/invoice.py +++ b/stripe/api_resources/invoice.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/invoice_item.py b/stripe/api_resources/invoice_item.py index e951172ea..f31d32cdb 100644 --- a/stripe/api_resources/invoice_item.py +++ b/stripe/api_resources/invoice_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/invoice_line_item.py b/stripe/api_resources/invoice_line_item.py index 44213351a..7d083e463 100644 --- a/stripe/api_resources/invoice_line_item.py +++ b/stripe/api_resources/invoice_line_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject from typing import Dict, List, Optional diff --git a/stripe/api_resources/issuing/__init__.py b/stripe/api_resources/issuing/__init__.py index 32f599954..525ec3dcb 100644 --- a/stripe/api_resources/issuing/__init__.py +++ b/stripe/api_resources/issuing/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.issuing.authorization import Authorization diff --git a/stripe/api_resources/issuing/authorization.py b/stripe/api_resources/issuing/authorization.py index b4c646efb..114712ab2 100644 --- a/stripe/api_resources/issuing/authorization.py +++ b/stripe/api_resources/issuing/authorization.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/issuing/card.py b/stripe/api_resources/issuing/card.py index 6f7b929f2..d37f2834b 100644 --- a/stripe/api_resources/issuing/card.py +++ b/stripe/api_resources/issuing/card.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/issuing/cardholder.py b/stripe/api_resources/issuing/cardholder.py index d66997f72..2f768c7d4 100644 --- a/stripe/api_resources/issuing/cardholder.py +++ b/stripe/api_resources/issuing/cardholder.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/issuing/dispute.py b/stripe/api_resources/issuing/dispute.py index 5173257eb..ddc82b70f 100644 --- a/stripe/api_resources/issuing/dispute.py +++ b/stripe/api_resources/issuing/dispute.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/issuing/token.py b/stripe/api_resources/issuing/token.py index 1a90228f1..ba36822dc 100644 --- a/stripe/api_resources/issuing/token.py +++ b/stripe/api_resources/issuing/token.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( ListableAPIResource, UpdateableAPIResource, diff --git a/stripe/api_resources/issuing/transaction.py b/stripe/api_resources/issuing/transaction.py index 5fc5c8f30..a5b14829f 100644 --- a/stripe/api_resources/issuing/transaction.py +++ b/stripe/api_resources/issuing/transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/line_item.py b/stripe/api_resources/line_item.py index 6c9f5b733..60c49c83e 100644 --- a/stripe/api_resources/line_item.py +++ b/stripe/api_resources/line_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import List, Optional from typing_extensions import Literal diff --git a/stripe/api_resources/list_object.py b/stripe/api_resources/list_object.py index f0b68838d..29aaf5fac 100644 --- a/stripe/api_resources/list_object.py +++ b/stripe/api_resources/list_object.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import, division, print_function from typing_extensions import Self from typing import List, Generic, TypeVar diff --git a/stripe/api_resources/login_link.py b/stripe/api_resources/login_link.py index dc4071786..1743ab418 100644 --- a/stripe/api_resources/login_link.py +++ b/stripe/api_resources/login_link.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing_extensions import Literal diff --git a/stripe/api_resources/mandate.py b/stripe/api_resources/mandate.py index 0acdc7cca..dd34bd96c 100644 --- a/stripe/api_resources/mandate.py +++ b/stripe/api_resources/mandate.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import APIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/payment_intent.py b/stripe/api_resources/payment_intent.py index 5913cf232..9ce1bd347 100644 --- a/stripe/api_resources/payment_intent.py +++ b/stripe/api_resources/payment_intent.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/payment_link.py b/stripe/api_resources/payment_link.py index e7ba558be..face44155 100644 --- a/stripe/api_resources/payment_link.py +++ b/stripe/api_resources/payment_link.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/payment_method.py b/stripe/api_resources/payment_method.py index d0b7bc10c..3a7545df2 100644 --- a/stripe/api_resources/payment_method.py +++ b/stripe/api_resources/payment_method.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/payment_method_configuration.py b/stripe/api_resources/payment_method_configuration.py index 8640383a8..f0280c844 100644 --- a/stripe/api_resources/payment_method_configuration.py +++ b/stripe/api_resources/payment_method_configuration.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/payment_method_domain.py b/stripe/api_resources/payment_method_domain.py index 067d34203..a945554b5 100644 --- a/stripe/api_resources/payment_method_domain.py +++ b/stripe/api_resources/payment_method_domain.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/payout.py b/stripe/api_resources/payout.py index 3a42582e7..7bf558301 100644 --- a/stripe/api_resources/payout.py +++ b/stripe/api_resources/payout.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/person.py b/stripe/api_resources/person.py index 92cde8710..373ef27b4 100644 --- a/stripe/api_resources/person.py +++ b/stripe/api_resources/person.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import UpdateableAPIResource from stripe.api_resources.account import Account from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/plan.py b/stripe/api_resources/plan.py index f4808cc4e..2e486f076 100644 --- a/stripe/api_resources/plan.py +++ b/stripe/api_resources/plan.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/platform_tax_fee.py b/stripe/api_resources/platform_tax_fee.py index cd5cda1df..46253f769 100644 --- a/stripe/api_resources/platform_tax_fee.py +++ b/stripe/api_resources/platform_tax_fee.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing_extensions import Literal diff --git a/stripe/api_resources/price.py b/stripe/api_resources/price.py index a0d3e2ecc..fe045b41d 100644 --- a/stripe/api_resources/price.py +++ b/stripe/api_resources/price.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/product.py b/stripe/api_resources/product.py index 54543a6a3..deaecbe1e 100644 --- a/stripe/api_resources/product.py +++ b/stripe/api_resources/product.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/promotion_code.py b/stripe/api_resources/promotion_code.py index d0b43c167..a6aee0e6f 100644 --- a/stripe/api_resources/promotion_code.py +++ b/stripe/api_resources/promotion_code.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/quote.py b/stripe/api_resources/quote.py index 4717d16c6..75ac113ef 100644 --- a/stripe/api_resources/quote.py +++ b/stripe/api_resources/quote.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - import stripe from stripe import api_requestor, util from stripe.api_resources.abstract import ( diff --git a/stripe/api_resources/radar/__init__.py b/stripe/api_resources/radar/__init__.py index 3003a9862..413f704f9 100644 --- a/stripe/api_resources/radar/__init__.py +++ b/stripe/api_resources/radar/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.radar.early_fraud_warning import EarlyFraudWarning diff --git a/stripe/api_resources/radar/early_fraud_warning.py b/stripe/api_resources/radar/early_fraud_warning.py index 8e1ee4469..b98ac0f67 100644 --- a/stripe/api_resources/radar/early_fraud_warning.py +++ b/stripe/api_resources/radar/early_fraud_warning.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject diff --git a/stripe/api_resources/radar/value_list.py b/stripe/api_resources/radar/value_list.py index 5b510f222..bba07c507 100644 --- a/stripe/api_resources/radar/value_list.py +++ b/stripe/api_resources/radar/value_list.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/radar/value_list_item.py b/stripe/api_resources/radar/value_list_item.py index 481f63e33..a82b8edee 100644 --- a/stripe/api_resources/radar/value_list_item.py +++ b/stripe/api_resources/radar/value_list_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/recipient_transfer.py b/stripe/api_resources/recipient_transfer.py index df2dcb9a1..8b417e242 100644 --- a/stripe/api_resources/recipient_transfer.py +++ b/stripe/api_resources/recipient_transfer.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/refund.py b/stripe/api_resources/refund.py index d6f081276..0a845948b 100644 --- a/stripe/api_resources/refund.py +++ b/stripe/api_resources/refund.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/reporting/__init__.py b/stripe/api_resources/reporting/__init__.py index a8fee8016..eba5b6b47 100644 --- a/stripe/api_resources/reporting/__init__.py +++ b/stripe/api_resources/reporting/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.reporting.report_run import ReportRun diff --git a/stripe/api_resources/reporting/report_run.py b/stripe/api_resources/reporting/report_run.py index 9043842cd..c7c54bd07 100644 --- a/stripe/api_resources/reporting/report_run.py +++ b/stripe/api_resources/reporting/report_run.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/reporting/report_type.py b/stripe/api_resources/reporting/report_type.py index fb63945a7..23513351f 100644 --- a/stripe/api_resources/reporting/report_type.py +++ b/stripe/api_resources/reporting/report_type.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from typing import Any, List, Optional diff --git a/stripe/api_resources/reserve_transaction.py b/stripe/api_resources/reserve_transaction.py index 3e1bdf009..bf985617c 100644 --- a/stripe/api_resources/reserve_transaction.py +++ b/stripe/api_resources/reserve_transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import Optional from typing_extensions import Literal diff --git a/stripe/api_resources/reversal.py b/stripe/api_resources/reversal.py index 7428a62b3..cd53cd801 100644 --- a/stripe/api_resources/reversal.py +++ b/stripe/api_resources/reversal.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import UpdateableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.transfer import Transfer diff --git a/stripe/api_resources/review.py b/stripe/api_resources/review.py index 4dae81f76..e32b703b2 100644 --- a/stripe/api_resources/review.py +++ b/stripe/api_resources/review.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField diff --git a/stripe/api_resources/search_result_object.py b/stripe/api_resources/search_result_object.py index 9b6dd196a..03918323c 100644 --- a/stripe/api_resources/search_result_object.py +++ b/stripe/api_resources/search_result_object.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import, division, print_function from typing_extensions import Self from typing import Generic, List, TypeVar diff --git a/stripe/api_resources/setup_attempt.py b/stripe/api_resources/setup_attempt.py index 7e05dabf9..f7a9c5b86 100644 --- a/stripe/api_resources/setup_attempt.py +++ b/stripe/api_resources/setup_attempt.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject diff --git a/stripe/api_resources/setup_intent.py b/stripe/api_resources/setup_intent.py index a513a2a11..231897fc2 100644 --- a/stripe/api_resources/setup_intent.py +++ b/stripe/api_resources/setup_intent.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/shipping_rate.py b/stripe/api_resources/shipping_rate.py index 62cb19fd3..73bf6e164 100644 --- a/stripe/api_resources/shipping_rate.py +++ b/stripe/api_resources/shipping_rate.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/sigma/__init__.py b/stripe/api_resources/sigma/__init__.py index 1f84c8ab9..7eda7b83d 100644 --- a/stripe/api_resources/sigma/__init__.py +++ b/stripe/api_resources/sigma/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.sigma.scheduled_query_run import ScheduledQueryRun diff --git a/stripe/api_resources/sigma/scheduled_query_run.py b/stripe/api_resources/sigma/scheduled_query_run.py index b87ce5108..fe208a5dc 100644 --- a/stripe/api_resources/sigma/scheduled_query_run.py +++ b/stripe/api_resources/sigma/scheduled_query_run.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/source.py b/stripe/api_resources/source.py index 10c96c757..494424407 100644 --- a/stripe/api_resources/source.py +++ b/stripe/api_resources/source.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import error, util from stripe.api_resources import Customer from stripe.api_resources.abstract import ( diff --git a/stripe/api_resources/source_mandate_notification.py b/stripe/api_resources/source_mandate_notification.py index 7bdb62d14..9d1a9ab81 100644 --- a/stripe/api_resources/source_mandate_notification.py +++ b/stripe/api_resources/source_mandate_notification.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import Optional from typing_extensions import Literal diff --git a/stripe/api_resources/source_transaction.py b/stripe/api_resources/source_transaction.py index d74db7c8d..10d8cf6d9 100644 --- a/stripe/api_resources/source_transaction.py +++ b/stripe/api_resources/source_transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import Optional from typing_extensions import Literal diff --git a/stripe/api_resources/subscription.py b/stripe/api_resources/subscription.py index d7717d860..ff47e8d67 100644 --- a/stripe/api_resources/subscription.py +++ b/stripe/api_resources/subscription.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/subscription_item.py b/stripe/api_resources/subscription_item.py index 6ab744628..7d8a91747 100644 --- a/stripe/api_resources/subscription_item.py +++ b/stripe/api_resources/subscription_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/subscription_schedule.py b/stripe/api_resources/subscription_schedule.py index e7230741c..6002354fd 100644 --- a/stripe/api_resources/subscription_schedule.py +++ b/stripe/api_resources/subscription_schedule.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/tax/__init__.py b/stripe/api_resources/tax/__init__.py index 9c0df5840..5cfa9556d 100644 --- a/stripe/api_resources/tax/__init__.py +++ b/stripe/api_resources/tax/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.tax.calculation import Calculation diff --git a/stripe/api_resources/tax/calculation.py b/stripe/api_resources/tax/calculation.py index b687ae496..e6af88ca9 100644 --- a/stripe/api_resources/tax/calculation.py +++ b/stripe/api_resources/tax/calculation.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.list_object import ListObject diff --git a/stripe/api_resources/tax/calculation_line_item.py b/stripe/api_resources/tax/calculation_line_item.py index c1d543da7..53b60fc40 100644 --- a/stripe/api_resources/tax/calculation_line_item.py +++ b/stripe/api_resources/tax/calculation_line_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import List, Optional from typing_extensions import Literal diff --git a/stripe/api_resources/tax/settings.py b/stripe/api_resources/tax/settings.py index 39ca2a637..40f352566 100644 --- a/stripe/api_resources/tax/settings.py +++ b/stripe/api_resources/tax/settings.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( SingletonAPIResource, UpdateableAPIResource, diff --git a/stripe/api_resources/tax/transaction.py b/stripe/api_resources/tax/transaction.py index 6f087ba9c..67b1cc051 100644 --- a/stripe/api_resources/tax/transaction.py +++ b/stripe/api_resources/tax/transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import APIResource from stripe.api_resources.list_object import ListObject diff --git a/stripe/api_resources/tax/transaction_line_item.py b/stripe/api_resources/tax/transaction_line_item.py index 666f76265..7e3f14191 100644 --- a/stripe/api_resources/tax/transaction_line_item.py +++ b/stripe/api_resources/tax/transaction_line_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import Dict, Optional from typing_extensions import Literal diff --git a/stripe/api_resources/tax_code.py b/stripe/api_resources/tax_code.py index cbbec00e4..2a44ea4e8 100644 --- a/stripe/api_resources/tax_code.py +++ b/stripe/api_resources/tax_code.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from typing import Any, Optional diff --git a/stripe/api_resources/tax_deducted_at_source.py b/stripe/api_resources/tax_deducted_at_source.py index 77b37ccb9..b8f22cbb1 100644 --- a/stripe/api_resources/tax_deducted_at_source.py +++ b/stripe/api_resources/tax_deducted_at_source.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing_extensions import Literal diff --git a/stripe/api_resources/tax_id.py b/stripe/api_resources/tax_id.py index 44c9730e9..8c837131e 100644 --- a/stripe/api_resources/tax_id.py +++ b/stripe/api_resources/tax_id.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import APIResource from stripe.api_resources.customer import Customer from stripe.api_resources.expandable_field import ExpandableField diff --git a/stripe/api_resources/tax_rate.py b/stripe/api_resources/tax_rate.py index 3c76bbf3c..5f290eeab 100644 --- a/stripe/api_resources/tax_rate.py +++ b/stripe/api_resources/tax_rate.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/terminal/__init__.py b/stripe/api_resources/terminal/__init__.py index 3d8b3b015..6cf037790 100644 --- a/stripe/api_resources/terminal/__init__.py +++ b/stripe/api_resources/terminal/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.terminal.configuration import Configuration diff --git a/stripe/api_resources/terminal/configuration.py b/stripe/api_resources/terminal/configuration.py index 901ce8776..6de19db59 100644 --- a/stripe/api_resources/terminal/configuration.py +++ b/stripe/api_resources/terminal/configuration.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/terminal/connection_token.py b/stripe/api_resources/terminal/connection_token.py index 501085af9..47dd27b88 100644 --- a/stripe/api_resources/terminal/connection_token.py +++ b/stripe/api_resources/terminal/connection_token.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import CreateableAPIResource from typing import Any, Optional, cast from typing_extensions import Literal diff --git a/stripe/api_resources/terminal/location.py b/stripe/api_resources/terminal/location.py index dad149810..4d2ed212d 100644 --- a/stripe/api_resources/terminal/location.py +++ b/stripe/api_resources/terminal/location.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/terminal/reader.py b/stripe/api_resources/terminal/reader.py index eaabfe210..b7bb87b38 100644 --- a/stripe/api_resources/terminal/reader.py +++ b/stripe/api_resources/terminal/reader.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/test_helpers/__init__.py b/stripe/api_resources/test_helpers/__init__.py index 25d3320a7..059f89b64 100644 --- a/stripe/api_resources/test_helpers/__init__.py +++ b/stripe/api_resources/test_helpers/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.test_helpers.test_clock import TestClock diff --git a/stripe/api_resources/test_helpers/test_clock.py b/stripe/api_resources/test_helpers/test_clock.py index 7ddb51649..3aae12104 100644 --- a/stripe/api_resources/test_helpers/test_clock.py +++ b/stripe/api_resources/test_helpers/test_clock.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/token.py b/stripe/api_resources/token.py index 3fb612b61..2258ea434 100644 --- a/stripe/api_resources/token.py +++ b/stripe/api_resources/token.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import CreateableAPIResource from typing import Any, Optional, cast from typing_extensions import Literal diff --git a/stripe/api_resources/topup.py b/stripe/api_resources/topup.py index 5cf94a776..d1157e8d2 100644 --- a/stripe/api_resources/topup.py +++ b/stripe/api_resources/topup.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/transfer.py b/stripe/api_resources/transfer.py index ffd8beb69..19d6ef9bf 100644 --- a/stripe/api_resources/transfer.py +++ b/stripe/api_resources/transfer.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/treasury/__init__.py b/stripe/api_resources/treasury/__init__.py index 5e80735bc..1bd71a0fe 100644 --- a/stripe/api_resources/treasury/__init__.py +++ b/stripe/api_resources/treasury/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.treasury.credit_reversal import CreditReversal diff --git a/stripe/api_resources/treasury/credit_reversal.py b/stripe/api_resources/treasury/credit_reversal.py index 610b899d6..2f6e336dd 100644 --- a/stripe/api_resources/treasury/credit_reversal.py +++ b/stripe/api_resources/treasury/credit_reversal.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/treasury/debit_reversal.py b/stripe/api_resources/treasury/debit_reversal.py index 368296522..9eeb0eb14 100644 --- a/stripe/api_resources/treasury/debit_reversal.py +++ b/stripe/api_resources/treasury/debit_reversal.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, diff --git a/stripe/api_resources/treasury/financial_account.py b/stripe/api_resources/treasury/financial_account.py index 22150d44d..df806287a 100644 --- a/stripe/api_resources/treasury/financial_account.py +++ b/stripe/api_resources/treasury/financial_account.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/api_resources/treasury/financial_account_features.py b/stripe/api_resources/treasury/financial_account_features.py index e1aec1888..885bc2026 100644 --- a/stripe/api_resources/treasury/financial_account_features.py +++ b/stripe/api_resources/treasury/financial_account_features.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import Optional from typing_extensions import Literal diff --git a/stripe/api_resources/treasury/inbound_transfer.py b/stripe/api_resources/treasury/inbound_transfer.py index 4a53e169e..0f8315c45 100644 --- a/stripe/api_resources/treasury/inbound_transfer.py +++ b/stripe/api_resources/treasury/inbound_transfer.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/treasury/outbound_payment.py b/stripe/api_resources/treasury/outbound_payment.py index 4699e08bc..7eabe1f59 100644 --- a/stripe/api_resources/treasury/outbound_payment.py +++ b/stripe/api_resources/treasury/outbound_payment.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/treasury/outbound_transfer.py b/stripe/api_resources/treasury/outbound_transfer.py index 498d6debd..f28b67fc4 100644 --- a/stripe/api_resources/treasury/outbound_transfer.py +++ b/stripe/api_resources/treasury/outbound_transfer.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, diff --git a/stripe/api_resources/treasury/received_credit.py b/stripe/api_resources/treasury/received_credit.py index 4a91b2da4..a07631db3 100644 --- a/stripe/api_resources/treasury/received_credit.py +++ b/stripe/api_resources/treasury/received_credit.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( APIResourceTestHelpers, ListableAPIResource, diff --git a/stripe/api_resources/treasury/received_debit.py b/stripe/api_resources/treasury/received_debit.py index f5300e632..1cb75c5e6 100644 --- a/stripe/api_resources/treasury/received_debit.py +++ b/stripe/api_resources/treasury/received_debit.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( APIResourceTestHelpers, ListableAPIResource, diff --git a/stripe/api_resources/treasury/transaction.py b/stripe/api_resources/treasury/transaction.py index 57dbf773e..a3ffdbb7f 100644 --- a/stripe/api_resources/treasury/transaction.py +++ b/stripe/api_resources/treasury/transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject diff --git a/stripe/api_resources/treasury/transaction_entry.py b/stripe/api_resources/treasury/transaction_entry.py index 3b402688b..e1f55a209 100644 --- a/stripe/api_resources/treasury/transaction_entry.py +++ b/stripe/api_resources/treasury/transaction_entry.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject diff --git a/stripe/api_resources/usage_record.py b/stripe/api_resources/usage_record.py index 9bd792d4d..74e0d2b04 100644 --- a/stripe/api_resources/usage_record.py +++ b/stripe/api_resources/usage_record.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import api_requestor, util from stripe.api_resources.abstract import APIResource from typing_extensions import Literal diff --git a/stripe/api_resources/usage_record_summary.py b/stripe/api_resources/usage_record_summary.py index 4ac8124eb..af317eb31 100644 --- a/stripe/api_resources/usage_record_summary.py +++ b/stripe/api_resources/usage_record_summary.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.stripe_object import StripeObject from typing import Optional from typing_extensions import Literal diff --git a/stripe/api_resources/webhook_endpoint.py b/stripe/api_resources/webhook_endpoint.py index c9a450fef..8ed4d87d8 100644 --- a/stripe/api_resources/webhook_endpoint.py +++ b/stripe/api_resources/webhook_endpoint.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, diff --git a/stripe/error.py b/stripe/error.py index 1b4bdfa65..6f392cdf2 100644 --- a/stripe/error.py +++ b/stripe/error.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/stripe/http_client.py b/stripe/http_client.py index 320a4d262..3ec52934d 100644 --- a/stripe/http_client.py +++ b/stripe/http_client.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import sys import textwrap import warnings diff --git a/stripe/multipart_data_generator.py b/stripe/multipart_data_generator.py index bfdc7eff4..f72104c3e 100644 --- a/stripe/multipart_data_generator.py +++ b/stripe/multipart_data_generator.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import random import io diff --git a/stripe/oauth.py b/stripe/oauth.py index 20f5789a8..eae91e547 100644 --- a/stripe/oauth.py +++ b/stripe/oauth.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from stripe import api_requestor, connect_api_base, error from urllib.parse import urlencode diff --git a/stripe/oauth_error.py b/stripe/oauth_error.py index 86f0dabc5..d0c95ec26 100644 --- a/stripe/oauth_error.py +++ b/stripe/oauth_error.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe from stripe.error import StripeError diff --git a/stripe/object_classes.py b/stripe/object_classes.py index 1e5eacfbe..b247e436d 100644 --- a/stripe/object_classes.py +++ b/stripe/object_classes.py @@ -1,7 +1,4 @@ # -*- coding: utf-8 -*- -# File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import api_resources @@ -9,7 +6,7 @@ # data structures api_resources.ListObject.OBJECT_NAME: api_resources.ListObject, api_resources.SearchResultObject.OBJECT_NAME: api_resources.SearchResultObject, - # business objects + # Object classes: The beginning of the section generated from our OpenAPI spec api_resources.Account.OBJECT_NAME: api_resources.Account, api_resources.AccountLink.OBJECT_NAME: api_resources.AccountLink, api_resources.AccountSession.OBJECT_NAME: api_resources.AccountSession, @@ -126,4 +123,5 @@ api_resources.UsageRecord.OBJECT_NAME: api_resources.UsageRecord, api_resources.UsageRecordSummary.OBJECT_NAME: api_resources.UsageRecordSummary, api_resources.WebhookEndpoint.OBJECT_NAME: api_resources.WebhookEndpoint, + # Object classes: The end of the section generated from our OpenAPI spec } diff --git a/stripe/request_metrics.py b/stripe/request_metrics.py index 3ed45a35b..3ab0e31b9 100644 --- a/stripe/request_metrics.py +++ b/stripe/request_metrics.py @@ -1,6 +1,3 @@ -from __future__ import absolute_import, division, print_function - - class RequestMetrics(object): def __init__(self, request_id, request_duration_ms): self.request_id = request_id diff --git a/stripe/stripe_object.py b/stripe/stripe_object.py index a28b02793..2d42ebb40 100644 --- a/stripe/stripe_object.py +++ b/stripe/stripe_object.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import datetime import json from copy import deepcopy diff --git a/stripe/stripe_response.py b/stripe/stripe_response.py index 6aee5c5c6..fbfe9285d 100644 --- a/stripe/stripe_response.py +++ b/stripe/stripe_response.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import json from collections import OrderedDict diff --git a/stripe/util.py b/stripe/util.py index cf4e8ce4d..3be378fb8 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import functools import hmac import io diff --git a/stripe/webhook.py b/stripe/webhook.py index 5008abf11..3f7de15be 100644 --- a/stripe/webhook.py +++ b/stripe/webhook.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import hmac import json import time diff --git a/tests/api_resources/abstract/test_api_resource.py b/tests/api_resources/abstract/test_api_resource.py index 13794611d..a85ce26af 100644 --- a/tests/api_resources/abstract/test_api_resource.py +++ b/tests/api_resources/abstract/test_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/abstract/test_createable_api_resource.py b/tests/api_resources/abstract/test_createable_api_resource.py index a40b78f6a..f8b2e17da 100644 --- a/tests/api_resources/abstract/test_createable_api_resource.py +++ b/tests/api_resources/abstract/test_createable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/abstract/test_custom_method.py b/tests/api_resources/abstract/test_custom_method.py index f3471ebf6..0add351f3 100644 --- a/tests/api_resources/abstract/test_custom_method.py +++ b/tests/api_resources/abstract/test_custom_method.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe from stripe import util diff --git a/tests/api_resources/abstract/test_deletable_api_resource.py b/tests/api_resources/abstract/test_deletable_api_resource.py index 532bd493e..4662c42a1 100644 --- a/tests/api_resources/abstract/test_deletable_api_resource.py +++ b/tests/api_resources/abstract/test_deletable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/abstract/test_listable_api_resource.py b/tests/api_resources/abstract/test_listable_api_resource.py index 21219b4a0..dcf538e3b 100644 --- a/tests/api_resources/abstract/test_listable_api_resource.py +++ b/tests/api_resources/abstract/test_listable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/abstract/test_nested_resource_class_methods.py b/tests/api_resources/abstract/test_nested_resource_class_methods.py index 8d5e67394..32f89f291 100644 --- a/tests/api_resources/abstract/test_nested_resource_class_methods.py +++ b/tests/api_resources/abstract/test_nested_resource_class_methods.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/abstract/test_searchable_api_resource.py b/tests/api_resources/abstract/test_searchable_api_resource.py index b4690bc00..7b2b8de35 100644 --- a/tests/api_resources/abstract/test_searchable_api_resource.py +++ b/tests/api_resources/abstract/test_searchable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/abstract/test_singleton_api_resource.py b/tests/api_resources/abstract/test_singleton_api_resource.py index d25286484..8e6ce32db 100644 --- a/tests/api_resources/abstract/test_singleton_api_resource.py +++ b/tests/api_resources/abstract/test_singleton_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/abstract/test_test_helpers_api_resource.py b/tests/api_resources/abstract/test_test_helpers_api_resource.py index e1bb930ee..d7593cfc8 100644 --- a/tests/api_resources/abstract/test_test_helpers_api_resource.py +++ b/tests/api_resources/abstract/test_test_helpers_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers diff --git a/tests/api_resources/abstract/test_updateable_api_resource.py b/tests/api_resources/abstract/test_updateable_api_resource.py index 161961562..694df7546 100644 --- a/tests/api_resources/abstract/test_updateable_api_resource.py +++ b/tests/api_resources/abstract/test_updateable_api_resource.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/billing_portal/test_configuration.py b/tests/api_resources/billing_portal/test_configuration.py index dffa3208e..3009f21a6 100644 --- a/tests/api_resources/billing_portal/test_configuration.py +++ b/tests/api_resources/billing_portal/test_configuration.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/billing_portal/test_session.py b/tests/api_resources/billing_portal/test_session.py index 9d2e2dfbb..0662c008d 100644 --- a/tests/api_resources/billing_portal/test_session.py +++ b/tests/api_resources/billing_portal/test_session.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/checkout/test_session.py b/tests/api_resources/checkout/test_session.py index ca1675c98..8fa015035 100644 --- a/tests/api_resources/checkout/test_session.py +++ b/tests/api_resources/checkout/test_session.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/identity/test_verification_report.py b/tests/api_resources/identity/test_verification_report.py index 2512eefd5..e613232be 100644 --- a/tests/api_resources/identity/test_verification_report.py +++ b/tests/api_resources/identity/test_verification_report.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/identity/test_verification_session.py b/tests/api_resources/identity/test_verification_session.py index 9290f7083..182968a8c 100644 --- a/tests/api_resources/identity/test_verification_session.py +++ b/tests/api_resources/identity/test_verification_session.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/issuing/test_authorization.py b/tests/api_resources/issuing/test_authorization.py index 00221d7ff..ecdba5e37 100644 --- a/tests/api_resources/issuing/test_authorization.py +++ b/tests/api_resources/issuing/test_authorization.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/issuing/test_card.py b/tests/api_resources/issuing/test_card.py index 7498c9976..0c153366b 100644 --- a/tests/api_resources/issuing/test_card.py +++ b/tests/api_resources/issuing/test_card.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/issuing/test_cardholder.py b/tests/api_resources/issuing/test_cardholder.py index 81c789f12..f1247e48d 100644 --- a/tests/api_resources/issuing/test_cardholder.py +++ b/tests/api_resources/issuing/test_cardholder.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/issuing/test_dispute.py b/tests/api_resources/issuing/test_dispute.py index 54e986080..576b47e88 100644 --- a/tests/api_resources/issuing/test_dispute.py +++ b/tests/api_resources/issuing/test_dispute.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/issuing/test_transaction.py b/tests/api_resources/issuing/test_transaction.py index ab024fa50..c75eb52e6 100644 --- a/tests/api_resources/issuing/test_transaction.py +++ b/tests/api_resources/issuing/test_transaction.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/radar/test_early_fraud_warning.py b/tests/api_resources/radar/test_early_fraud_warning.py index 7cd57dc6c..1f71eb6dd 100644 --- a/tests/api_resources/radar/test_early_fraud_warning.py +++ b/tests/api_resources/radar/test_early_fraud_warning.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/radar/test_value_list.py b/tests/api_resources/radar/test_value_list.py index 2999c4c1d..5d6035e17 100644 --- a/tests/api_resources/radar/test_value_list.py +++ b/tests/api_resources/radar/test_value_list.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/radar/test_value_list_item.py b/tests/api_resources/radar/test_value_list_item.py index 86eb49c26..e0aa19d58 100644 --- a/tests/api_resources/radar/test_value_list_item.py +++ b/tests/api_resources/radar/test_value_list_item.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/reporting/test_report_run.py b/tests/api_resources/reporting/test_report_run.py index 23ac0a2a9..24bae9db6 100644 --- a/tests/api_resources/reporting/test_report_run.py +++ b/tests/api_resources/reporting/test_report_run.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/reporting/test_report_type.py b/tests/api_resources/reporting/test_report_type.py index d01a77bff..f820cafe6 100644 --- a/tests/api_resources/reporting/test_report_type.py +++ b/tests/api_resources/reporting/test_report_type.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/sigma/test_scheduled_query_run.py b/tests/api_resources/sigma/test_scheduled_query_run.py index 4a7417d89..0287a9df0 100644 --- a/tests/api_resources/sigma/test_scheduled_query_run.py +++ b/tests/api_resources/sigma/test_scheduled_query_run.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/terminal/test_connection_token.py b/tests/api_resources/terminal/test_connection_token.py index f7f69c94a..71eaa97dc 100644 --- a/tests/api_resources/terminal/test_connection_token.py +++ b/tests/api_resources/terminal/test_connection_token.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/terminal/test_location.py b/tests/api_resources/terminal/test_location.py index c7a590f91..34e68bb70 100644 --- a/tests/api_resources/terminal/test_location.py +++ b/tests/api_resources/terminal/test_location.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/terminal/test_reader.py b/tests/api_resources/terminal/test_reader.py index 832390bcd..ce5edd7de 100644 --- a/tests/api_resources/terminal/test_reader.py +++ b/tests/api_resources/terminal/test_reader.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_account.py b/tests/api_resources/test_account.py index 6a797cfee..e4f809221 100644 --- a/tests/api_resources/test_account.py +++ b/tests/api_resources/test_account.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_account_link.py b/tests/api_resources/test_account_link.py index 8f8a59f04..933a9f9bc 100644 --- a/tests/api_resources/test_account_link.py +++ b/tests/api_resources/test_account_link.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_apple_pay_domain.py b/tests/api_resources/test_apple_pay_domain.py index c32309837..418e6f366 100644 --- a/tests/api_resources/test_apple_pay_domain.py +++ b/tests/api_resources/test_apple_pay_domain.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_application_fee.py b/tests/api_resources/test_application_fee.py index 8597a315a..a188bdc9e 100644 --- a/tests/api_resources/test_application_fee.py +++ b/tests/api_resources/test_application_fee.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_application_fee_refund.py b/tests/api_resources/test_application_fee_refund.py index b864df346..eef1590e9 100644 --- a/tests/api_resources/test_application_fee_refund.py +++ b/tests/api_resources/test_application_fee_refund.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_balance.py b/tests/api_resources/test_balance.py index 1a81cb894..0f83404aa 100644 --- a/tests/api_resources/test_balance.py +++ b/tests/api_resources/test_balance.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_balance_transaction.py b/tests/api_resources/test_balance_transaction.py index a05ccc1b3..86569b549 100644 --- a/tests/api_resources/test_balance_transaction.py +++ b/tests/api_resources/test_balance_transaction.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_bank_account.py b/tests/api_resources/test_bank_account.py index 711e32853..05f9dad96 100644 --- a/tests/api_resources/test_bank_account.py +++ b/tests/api_resources/test_bank_account.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_capability.py b/tests/api_resources/test_capability.py index 776fc2513..1a2727c37 100644 --- a/tests/api_resources/test_capability.py +++ b/tests/api_resources/test_capability.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_card.py b/tests/api_resources/test_card.py index be47c9c76..bc080115d 100644 --- a/tests/api_resources/test_card.py +++ b/tests/api_resources/test_card.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_charge.py b/tests/api_resources/test_charge.py index 2b1f1648c..01137a0ad 100644 --- a/tests/api_resources/test_charge.py +++ b/tests/api_resources/test_charge.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_country_spec.py b/tests/api_resources/test_country_spec.py index 26ce411b3..4973ca4c1 100644 --- a/tests/api_resources/test_country_spec.py +++ b/tests/api_resources/test_country_spec.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_coupon.py b/tests/api_resources/test_coupon.py index 4b8be4260..d408d8e58 100644 --- a/tests/api_resources/test_coupon.py +++ b/tests/api_resources/test_coupon.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_credit_note.py b/tests/api_resources/test_credit_note.py index 10ffc7b8b..d35772e90 100644 --- a/tests/api_resources/test_credit_note.py +++ b/tests/api_resources/test_credit_note.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_customer.py b/tests/api_resources/test_customer.py index 7af265cae..8cfa5b967 100644 --- a/tests/api_resources/test_customer.py +++ b/tests/api_resources/test_customer.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_customer_balance_transaction.py b/tests/api_resources/test_customer_balance_transaction.py index eeaf32cb2..d5975aecb 100644 --- a/tests/api_resources/test_customer_balance_transaction.py +++ b/tests/api_resources/test_customer_balance_transaction.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_dispute.py b/tests/api_resources/test_dispute.py index 83ccafe6b..e2e81bd52 100644 --- a/tests/api_resources/test_dispute.py +++ b/tests/api_resources/test_dispute.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_ephemeral_key.py b/tests/api_resources/test_ephemeral_key.py index 572a733c3..3e26f033e 100644 --- a/tests/api_resources/test_ephemeral_key.py +++ b/tests/api_resources/test_ephemeral_key.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_event.py b/tests/api_resources/test_event.py index 05fc7927f..5f869a649 100644 --- a/tests/api_resources/test_event.py +++ b/tests/api_resources/test_event.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_exchange_rate.py b/tests/api_resources/test_exchange_rate.py index 3e3e809fe..3d29ce499 100644 --- a/tests/api_resources/test_exchange_rate.py +++ b/tests/api_resources/test_exchange_rate.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_file.py b/tests/api_resources/test_file.py index c9d237b46..ebfb13aa2 100644 --- a/tests/api_resources/test_file.py +++ b/tests/api_resources/test_file.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import tempfile import pytest diff --git a/tests/api_resources/test_file_link.py b/tests/api_resources/test_file_link.py index 792640850..0eb32dc4b 100644 --- a/tests/api_resources/test_file_link.py +++ b/tests/api_resources/test_file_link.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_file_upload.py b/tests/api_resources/test_file_upload.py index faec4b5a5..829a85638 100644 --- a/tests/api_resources/test_file_upload.py +++ b/tests/api_resources/test_file_upload.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import tempfile import pytest diff --git a/tests/api_resources/test_invoice.py b/tests/api_resources/test_invoice.py index 4a53e9b98..4eb45a136 100644 --- a/tests/api_resources/test_invoice.py +++ b/tests/api_resources/test_invoice.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_invoice_item.py b/tests/api_resources/test_invoice_item.py index e7579838b..b2dca7802 100644 --- a/tests/api_resources/test_invoice_item.py +++ b/tests/api_resources/test_invoice_item.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_invoice_line_item.py b/tests/api_resources/test_invoice_line_item.py index cae24ef22..9f1fcd6b5 100644 --- a/tests/api_resources/test_invoice_line_item.py +++ b/tests/api_resources/test_invoice_line_item.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_list_object.py b/tests/api_resources/test_list_object.py index 537583988..943cae45e 100644 --- a/tests/api_resources/test_list_object.py +++ b/tests/api_resources/test_list_object.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import json import pytest diff --git a/tests/api_resources/test_mandate.py b/tests/api_resources/test_mandate.py index 6a36e7e70..ef0094edc 100644 --- a/tests/api_resources/test_mandate.py +++ b/tests/api_resources/test_mandate.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_payment_intent.py b/tests/api_resources/test_payment_intent.py index 05103a26d..a622a3e74 100644 --- a/tests/api_resources/test_payment_intent.py +++ b/tests/api_resources/test_payment_intent.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_payment_method.py b/tests/api_resources/test_payment_method.py index 5fafd9a3c..69e304326 100644 --- a/tests/api_resources/test_payment_method.py +++ b/tests/api_resources/test_payment_method.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_payout.py b/tests/api_resources/test_payout.py index 0ca35c1ea..5121d8e11 100644 --- a/tests/api_resources/test_payout.py +++ b/tests/api_resources/test_payout.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_person.py b/tests/api_resources/test_person.py index c6edd38ba..46ac8caf7 100644 --- a/tests/api_resources/test_person.py +++ b/tests/api_resources/test_person.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_plan.py b/tests/api_resources/test_plan.py index 6606dbaa0..fbf4370af 100644 --- a/tests/api_resources/test_plan.py +++ b/tests/api_resources/test_plan.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_price.py b/tests/api_resources/test_price.py index 48b87f030..4d4a15f5a 100644 --- a/tests/api_resources/test_price.py +++ b/tests/api_resources/test_price.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_product.py b/tests/api_resources/test_product.py index 923b3aff7..dc2ffabc0 100644 --- a/tests/api_resources/test_product.py +++ b/tests/api_resources/test_product.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_promotion_code.py b/tests/api_resources/test_promotion_code.py index 397cf34cd..784dd8c0b 100644 --- a/tests/api_resources/test_promotion_code.py +++ b/tests/api_resources/test_promotion_code.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_quote.py b/tests/api_resources/test_quote.py index b74789d87..43945a2d2 100644 --- a/tests/api_resources/test_quote.py +++ b/tests/api_resources/test_quote.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe import pytest diff --git a/tests/api_resources/test_refund.py b/tests/api_resources/test_refund.py index ffdd813b6..761042eae 100644 --- a/tests/api_resources/test_refund.py +++ b/tests/api_resources/test_refund.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_reversal.py b/tests/api_resources/test_reversal.py index ab4c22459..e48034e0b 100644 --- a/tests/api_resources/test_reversal.py +++ b/tests/api_resources/test_reversal.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_review.py b/tests/api_resources/test_review.py index 2d0c092d5..9db471414 100644 --- a/tests/api_resources/test_review.py +++ b/tests/api_resources/test_review.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_search_result_object.py b/tests/api_resources/test_search_result_object.py index 8517c7881..c43dfa0cd 100644 --- a/tests/api_resources/test_search_result_object.py +++ b/tests/api_resources/test_search_result_object.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import json import pytest diff --git a/tests/api_resources/test_setup_attempt.py b/tests/api_resources/test_setup_attempt.py index 818221044..556d6ae3c 100644 --- a/tests/api_resources/test_setup_attempt.py +++ b/tests/api_resources/test_setup_attempt.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_setup_intent.py b/tests/api_resources/test_setup_intent.py index 02d6eecf2..f18c8208e 100644 --- a/tests/api_resources/test_setup_intent.py +++ b/tests/api_resources/test_setup_intent.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_source.py b/tests/api_resources/test_source.py index fa36a158e..a60058bee 100644 --- a/tests/api_resources/test_source.py +++ b/tests/api_resources/test_source.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_source_transaction.py b/tests/api_resources/test_source_transaction.py index 24af7d69a..1e25c0d2b 100644 --- a/tests/api_resources/test_source_transaction.py +++ b/tests/api_resources/test_source_transaction.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_subscription.py b/tests/api_resources/test_subscription.py index ccdb6cbc3..a2333018b 100644 --- a/tests/api_resources/test_subscription.py +++ b/tests/api_resources/test_subscription.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_subscription_item.py b/tests/api_resources/test_subscription_item.py index 72d1e543d..5dfec140b 100644 --- a/tests/api_resources/test_subscription_item.py +++ b/tests/api_resources/test_subscription_item.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_subscription_schedule.py b/tests/api_resources/test_subscription_schedule.py index 10c7cba8b..ca0e0e1cd 100644 --- a/tests/api_resources/test_subscription_schedule.py +++ b/tests/api_resources/test_subscription_schedule.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_tax_code.py b/tests/api_resources/test_tax_code.py index 2545005fb..c35448af2 100644 --- a/tests/api_resources/test_tax_code.py +++ b/tests/api_resources/test_tax_code.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_tax_id.py b/tests/api_resources/test_tax_id.py index 424cc1911..f55d8c5f9 100644 --- a/tests/api_resources/test_tax_id.py +++ b/tests/api_resources/test_tax_id.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_tax_rate.py b/tests/api_resources/test_tax_rate.py index 64b4cb388..be9f65463 100644 --- a/tests/api_resources/test_tax_rate.py +++ b/tests/api_resources/test_tax_rate.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_topup.py b/tests/api_resources/test_topup.py index e080ffaa5..bbbd66990 100644 --- a/tests/api_resources/test_topup.py +++ b/tests/api_resources/test_topup.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_transfer.py b/tests/api_resources/test_transfer.py index 095cf4b0a..f574cf0ae 100644 --- a/tests/api_resources/test_transfer.py +++ b/tests/api_resources/test_transfer.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_usage_record.py b/tests/api_resources/test_usage_record.py index 29117fbf3..0eb91f368 100644 --- a/tests/api_resources/test_usage_record.py +++ b/tests/api_resources/test_usage_record.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import stripe diff --git a/tests/api_resources/test_usage_record_summary.py b/tests/api_resources/test_usage_record_summary.py index dfe289e50..cb1a75b58 100644 --- a/tests/api_resources/test_usage_record_summary.py +++ b/tests/api_resources/test_usage_record_summary.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/api_resources/test_webhook_endpoint.py b/tests/api_resources/test_webhook_endpoint.py index 233993781..93b970196 100644 --- a/tests/api_resources/test_webhook_endpoint.py +++ b/tests/api_resources/test_webhook_endpoint.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import stripe diff --git a/tests/conftest.py b/tests/conftest.py index f501ee62a..836859fe0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import atexit import os import sys diff --git a/tests/request_mock.py b/tests/request_mock.py index a346998ee..aec5d66f9 100644 --- a/tests/request_mock.py +++ b/tests/request_mock.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import json import stripe diff --git a/tests/stripe_mock.py b/tests/stripe_mock.py index f2f410037..a9df1260b 100644 --- a/tests/stripe_mock.py +++ b/tests/stripe_mock.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import os import socket import subprocess diff --git a/tests/test_api_requestor.py b/tests/test_api_requestor.py index 249f8acb0..240359f21 100644 --- a/tests/test_api_requestor.py +++ b/tests/test_api_requestor.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import datetime import json import tempfile diff --git a/tests/test_error.py b/tests/test_error.py index e53d7f639..abb83bc42 100644 --- a/tests/test_error.py +++ b/tests/test_error.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function from stripe import error diff --git a/tests/test_http_client.py b/tests/test_http_client.py index b42c579b1..66e4ff9da 100644 --- a/tests/test_http_client.py +++ b/tests/test_http_client.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import pytest import json diff --git a/tests/test_integration.py b/tests/test_integration.py index b0090bc14..6673f6175 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import platform import sys from threading import Thread, Lock diff --git a/tests/test_multipart_data_generator.py b/tests/test_multipart_data_generator.py index ff5f64384..b5aec9ea2 100644 --- a/tests/test_multipart_data_generator.py +++ b/tests/test_multipart_data_generator.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function import re import io diff --git a/tests/test_oauth.py b/tests/test_oauth.py index 1a6432fcb..79d8875eb 100644 --- a/tests/test_oauth.py +++ b/tests/test_oauth.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - from urllib.parse import parse_qs, urlparse import stripe diff --git a/tests/test_oauth_error.py b/tests/test_oauth_error.py index bb251209d..5eee7b66e 100644 --- a/tests/test_oauth_error.py +++ b/tests/test_oauth_error.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function from stripe import oauth_error diff --git a/tests/test_stripe_object.py b/tests/test_stripe_object.py index bb0dedcd4..fa01e4c45 100644 --- a/tests/test_stripe_object.py +++ b/tests/test_stripe_object.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import datetime import json import pickle diff --git a/tests/test_stripe_response.py b/tests/test_stripe_response.py index 00231f6e6..c4d27b6e9 100644 --- a/tests/test_stripe_response.py +++ b/tests/test_stripe_response.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import json from collections import OrderedDict diff --git a/tests/test_util.py b/tests/test_util.py index b7fa6d9e3..1de13faca 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import sys from collections import namedtuple diff --git a/tests/test_webhook.py b/tests/test_webhook.py index e5cdcefdd..52568e464 100644 --- a/tests/test_webhook.py +++ b/tests/test_webhook.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division, print_function - import time import pytest From 10e3ba13f533d8fefd04f71a0cab96bf5fd68d96 Mon Sep 17 00:00:00 2001 From: "stripe-openapi[bot]" <105521251+stripe-openapi[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 12:20:15 -0700 Subject: [PATCH 4/8] Update generated code for v597 (#1071) Co-authored-by: Stripe OpenAPI <105521251+stripe-openapi[bot]@users.noreply.github.com> --- OPENAPI_VERSION | 2 +- stripe/api_resources/checkout/session.py | 4 ++++ stripe/api_resources/terminal/configuration.py | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/OPENAPI_VERSION b/OPENAPI_VERSION index e8f6775c5..e5991fae3 100644 --- a/OPENAPI_VERSION +++ b/OPENAPI_VERSION @@ -1 +1 @@ -v581 \ No newline at end of file +v597 \ No newline at end of file diff --git a/stripe/api_resources/checkout/session.py b/stripe/api_resources/checkout/session.py index a0076d6d8..d0348d2b9 100644 --- a/stripe/api_resources/checkout/session.py +++ b/stripe/api_resources/checkout/session.py @@ -52,6 +52,7 @@ class Session( billing_address_collection: Optional[Literal["auto", "required"]] cancel_url: Optional[str] client_reference_id: Optional[str] + client_secret: Optional[str] consent: Optional[StripeObject] consent_collection: Optional[StripeObject] created: int @@ -126,6 +127,8 @@ class Session( payment_status: Literal["no_payment_required", "paid", "unpaid"] phone_number_collection: Optional[StripeObject] recovered_from: Optional[str] + redirect_on_completion: Optional[Literal["always", "if_required", "never"]] + return_url: Optional[str] setup_intent: Optional[ExpandableField["SetupIntent"]] shipping_address_collection: Optional[StripeObject] shipping_cost: Optional[StripeObject] @@ -137,6 +140,7 @@ class Session( success_url: Optional[str] tax_id_collection: Optional[StripeObject] total_details: Optional[StripeObject] + ui_mode: Optional[Literal["embedded", "hosted"]] url: Optional[str] @classmethod diff --git a/stripe/api_resources/terminal/configuration.py b/stripe/api_resources/terminal/configuration.py index 6de19db59..847658ac2 100644 --- a/stripe/api_resources/terminal/configuration.py +++ b/stripe/api_resources/terminal/configuration.py @@ -30,6 +30,7 @@ class Configuration( is_account_default: Optional[bool] livemode: bool object: Literal["terminal.configuration"] + offline: Optional[StripeObject] tipping: Optional[StripeObject] verifone_p400: Optional[StripeObject] deleted: Optional[Literal[True]] From 4a04f0ec984ccc65ff0d723cc7265afae2714b63 Mon Sep 17 00:00:00 2001 From: Richard Marmorstein Date: Fri, 22 Sep 2023 15:41:01 -0700 Subject: [PATCH 5/8] wip --- stripe/__init__.py | 1 + stripe/stripe_object.py | 18 +++-- stripe/util.py | 6 ++ tests/test_stripe_object.py | 129 +++++++++++++++--------------------- 4 files changed, 72 insertions(+), 82 deletions(-) diff --git a/stripe/__init__.py b/stripe/__init__.py index fb32a85b4..666742045 100644 --- a/stripe/__init__.py +++ b/stripe/__init__.py @@ -51,6 +51,7 @@ from . import stripe_response # noqa from . import stripe_object # noqa +from . import api_resources # noqa # Sets some basic information about the running application that's sent along diff --git a/stripe/stripe_object.py b/stripe/stripe_object.py index 2d42ebb40..dcfb9866b 100644 --- a/stripe/stripe_object.py +++ b/stripe/stripe_object.py @@ -1,8 +1,8 @@ import datetime import json from copy import deepcopy -from typing_extensions import TYPE_CHECKING, Literal -from typing import Any, Dict, Optional +from typing_extensions import TYPE_CHECKING, Literal, Type +from typing import Any, Dict, Optional, ClassVar import stripe from stripe import api_requestor, util @@ -223,12 +223,11 @@ def refresh_from( self._transient_values = self._transient_values - set(values) for k, v in values.items(): - super(StripeObject, self).__setitem__( - k, - util.convert_to_stripe_object( - v, api_key, stripe_version, stripe_account - ), + inner_class = self._get_inner_class_type(k) + obj = util.convert_to_stripe_object( + v, api_key, stripe_version, stripe_account, None, inner_class ) + super(StripeObject, self).__setitem__(k, obj) self._previous = values @@ -415,3 +414,8 @@ def __deepcopy__(self, memo): super(StripeObject, copied).__setitem__(k, deepcopy(v, memo)) return copied + + _inner_class_types: ClassVar[Dict[str, Type["StripeObject"]]] = {} + + def _get_inner_class_type(self, field_name: str): + return self._inner_class_types.get(field_name) diff --git a/stripe/util.py b/stripe/util.py index cbdb6678d..4ea56e35e 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -149,6 +149,7 @@ def convert_to_stripe_object( stripe_version: Optional[str] = None, stripe_account: Optional[str] = None, params: Optional[Dict[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, ) -> "StripeObject": ... @@ -160,6 +161,7 @@ def convert_to_stripe_object( stripe_version: Optional[str] = None, stripe_account: Optional[str] = None, params: Optional[Dict[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, ) -> List["StripeObject"]: ... @@ -170,6 +172,7 @@ def convert_to_stripe_object( stripe_version: Optional[str] = None, stripe_account: Optional[str] = None, params: Optional[Dict[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, ) -> Union["StripeObject", List["StripeObject"]]: # If we get a StripeResponse, we'll want to return a # StripeObject with the last_response field filled out with @@ -187,6 +190,7 @@ def convert_to_stripe_object( api_key, stripe_version, stripe_account, + klass_=klass_, ) for i in resp ] @@ -199,6 +203,8 @@ def convert_to_stripe_object( klass = get_object_classes().get( klass_name, stripe.stripe_object.StripeObject ) + elif klass_ is not None: + klass = klass_ else: klass = stripe.stripe_object.StripeObject diff --git a/tests/test_stripe_object.py b/tests/test_stripe_object.py index fa01e4c45..5bf3ef510 100644 --- a/tests/test_stripe_object.py +++ b/tests/test_stripe_object.py @@ -9,82 +9,50 @@ SAMPLE_INVOICE = json.loads( - """ -{ - "amount_due": 1305, - "attempt_count": 0, - "attempted": true, - "charge": "ch_wajkQ5aDTzFs5v", - "closed": true, - "customer": "cus_osllUe2f1BzrRT", - "date": 1338238728, - "discount": null, - "ending_balance": 0, - "id": "in_t9mHb2hpK7mml1", - "livemode": false, - "next_payment_attempt": null, + """{ + "id": "in_xyz", "object": "invoice", - "paid": true, - "period_end": 1338238728, - "period_start": 1338238716, - "starting_balance": -8695, - "subtotal": 10000, - "total": 10000, + "automatic_tax": { + "enabled": false, + "status": null + }, + "created": 1694725031, "lines": { "object": "list", "data": [ { - "id": "il_1LSiex2eZvKYlo2CZ5IspTNx", + "id": "sli_xyz", "object": "line_item", - "amount": 2499, - "amount_excluding_tax": 2499, - "currency": "usd", - "description": "My First Invoice Item (created for API docs)", - "discount_amounts": [], - "discountable": true, - "discounts": [], - "invoice_item": "ii_1LSiex2eZvKYlo2C0X4adTLR", - "livemode": false, - "metadata": {}, "period": { - "end": 1659537295, - "start": 1659537295 + "end": 1697316491, + "start": 1694724491 + }, + "plan": { + "id": "price_xyz", + "object": "plan" }, "price": { - "id": "price_1LSicu2eZvKYlo2C4WSIaXEp", + "id": "price_xyz", "object": "price", - "active": true, "billing_scheme": "per_unit", - "created": 1659537168, - "currency": "usd", - "custom_unit_amount": null, - "livemode": false, - "lookup_key": null, - "metadata": {}, - "nickname": null, - "product": "prod_MB4mvosUV5tObf", - "recurring": null, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "one_time", - "unit_amount": 2499, - "unit_amount_decimal": "2499" - }, - "proration": false, - "proration_details": { - "credited_items": null - }, - "quantity": 1, - "subscription": null, - "tax_amounts": [], - "tax_rates": [], - "type": "invoiceitem", - "unit_amount_excluding_tax": "2499" + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + } + } } ], "has_more": false, - "url": "/v1/invoices/in_t9mHb2hpK7mml1/lines" + "total_count": 1, + "url": "/v1/invoices/in_1NqMb5IFdHa3DenshEllwgEX/lines" + }, + "livemode": false, + "next_payment_attempt": null, + "shipping_cost": { + "taxes": [{"amount": 10, "rate": {"id": "rate_xyz", "object": "tax_rate", "active": false}}] } } """ @@ -182,29 +150,40 @@ def test_passing_nested_refresh(self): assert nested.stripe_account == "acct_foo" def test_refresh_from_nested_object(self): - obj = stripe.stripe_object.StripeObject.construct_from( - SAMPLE_INVOICE, "key" - ) + obj = stripe.Invoice.construct_from(SAMPLE_INVOICE, "key") assert len(obj.lines) == 1 + # Does a list get deserialized to the correct class? assert isinstance(obj.lines, stripe.ListObject) + # Do items within a list get deserialized to the correct class? assert isinstance(obj.lines.data[0], stripe.InvoiceLineItem) - assert isinstance( - obj.lines.data[0].price, stripe.stripe_object.StripeObject - ) + # Do references to other top-level resources get deserialized to the correct class? assert isinstance(obj.lines.data[0].price, stripe.Price) assert obj.lines.data[0].price.billing_scheme == "per_unit" + # Do inner classes on referenced top-level resources get deserialized to the correct inner class. + assert isinstance( + obj.lines.data[0].price.recurring, stripe.Price.Recurring + ) + assert isinstance( + obj.lines.data[0].price.recurring, stripe.Price.Recurring + ) - def test_refresh_from_nested_object_can_be_paged(self): - obj = stripe.stripe_object.StripeObject.construct_from( - SAMPLE_INVOICE, "key" + # Test: do nested objects get deserialized to the correct inner class? + assert isinstance(obj.automatic_tax, stripe.Invoice.AutomaticTax) + assert isinstance(obj.shipping_cost, stripe.Invoice.ShippingCost) + # Test: do nested objects inside lists get deserialized to the correct inner class? + assert isinstance( + obj.shipping_cost.taxes[0], stripe.Invoice.ShippingCost.Tax ) + def test_refresh_from_nested_object_can_be_paged(self): + obj = stripe.Invoice.construct_from(SAMPLE_INVOICE, "key") + assert len(obj.lines) == 1 assert isinstance(obj.lines, stripe.ListObject) seen = [item["id"] for item in obj.lines.auto_paging_iter()] - assert seen == ["il_1LSiex2eZvKYlo2CZ5IspTNx"] + assert seen == ["sli_xyz"] assert isinstance(obj.lines.data[0], stripe.InvoiceLineItem) assert isinstance( @@ -222,12 +201,12 @@ def test_to_json(self): def check_invoice_data(self, data): # Check rough structure - assert len(list(data.keys())) == 20 - assert len(list(data["lines"]["data"][0].keys())) == 22 + assert len(list(data.keys())) == 8 + assert len(list(data["lines"]["data"][0].keys())) == 5 assert len(data["lines"]["data"]) == 1 # Check various data types - assert data["date"] == 1338238728 + assert data["created"] == 1694725031 assert data["next_payment_attempt"] is None assert data["livemode"] is False assert ( From 140bfd7dab3fce66c385cb8cc9ed9be0fab79e01 Mon Sep 17 00:00:00 2001 From: Richard Marmorstein Date: Mon, 9 Oct 2023 11:54:05 -0700 Subject: [PATCH 6/8] Properly deserialize beneath map types --- stripe/stripe_object.py | 32 ++++++++++++++++++++++++++++---- tests/test_stripe_object.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/stripe/stripe_object.py b/stripe/stripe_object.py index dcfb9866b..c2ecd7e6d 100644 --- a/stripe/stripe_object.py +++ b/stripe/stripe_object.py @@ -2,7 +2,7 @@ import json from copy import deepcopy from typing_extensions import TYPE_CHECKING, Literal, Type -from typing import Any, Dict, Optional, ClassVar +from typing import Any, Dict, List, Optional, ClassVar import stripe from stripe import api_requestor, util @@ -224,9 +224,29 @@ def refresh_from( for k, v in values.items(): inner_class = self._get_inner_class_type(k) - obj = util.convert_to_stripe_object( - v, api_key, stripe_version, stripe_account, None, inner_class - ) + is_dict = self._get_inner_class_is_beneath_dict(k) + if is_dict: + obj = { + k: util.convert_to_stripe_object( + v, + api_key, + stripe_version, + stripe_account, + None, + inner_class, + ) + for k, v in v.items() + if v is not None + } + else: + obj = util.convert_to_stripe_object( + v, + api_key, + stripe_version, + stripe_account, + None, + inner_class, + ) super(StripeObject, self).__setitem__(k, obj) self._previous = values @@ -416,6 +436,10 @@ def __deepcopy__(self, memo): return copied _inner_class_types: ClassVar[Dict[str, Type["StripeObject"]]] = {} + _inner_class_dicts: ClassVar[List[str]] = [] def _get_inner_class_type(self, field_name: str): return self._inner_class_types.get(field_name) + + def _get_inner_class_is_beneath_dict(self, field_name: str): + return field_name in self._inner_class_dicts diff --git a/tests/test_stripe_object.py b/tests/test_stripe_object.py index 5bf3ef510..30d7783bd 100644 --- a/tests/test_stripe_object.py +++ b/tests/test_stripe_object.py @@ -7,6 +7,24 @@ import stripe +# We use this because it has a map, "restriction.currency_options" from string -> CurrencyOptions nested class. +SAMPLE_PROMOTION_CODE = json.loads( + """{ + "id": "promo_1NzO4FIFdHa3DensTcbAA0mz", + "object": "promotion_code", + "restrictions": { + "currency_options": { + "gbp": { + "minimum_amount": 10 + }, + "usd": { + "minimum_amount": 5 + } + } + } +} +""" +) SAMPLE_INVOICE = json.loads( """{ @@ -192,6 +210,22 @@ def test_refresh_from_nested_object_can_be_paged(self): assert isinstance(obj.lines.data[0].price, stripe.Price) assert obj.lines.data[0].price.billing_scheme == "per_unit" + def test_refresh_on_map_to_nested_object(self): + obj = stripe.PromotionCode.construct_from(SAMPLE_PROMOTION_CODE, "key") + + assert isinstance( + obj.restrictions.currency_options, + dict, + ) + assert not isinstance( + obj.restrictions.currency_options, + stripe.stripe_object.StripeObject, + ) + assert isinstance( + obj.restrictions.currency_options["gbp"], + stripe.PromotionCode.Restrictions.CurrencyOptions, + ) + def test_to_json(self): obj = stripe.stripe_object.StripeObject.construct_from( SAMPLE_INVOICE, "key" From 28c56504d054da302ca66552b63cade2241a3368 Mon Sep 17 00:00:00 2001 From: Richard Marmorstein Date: Wed, 11 Oct 2023 12:56:41 -0700 Subject: [PATCH 7/8] Generate nested resource classes --- stripe/api_resources/account.py | 470 +++++++- stripe/api_resources/account_session.py | 48 +- stripe/api_resources/apps/secret.py | 9 +- stripe/api_resources/balance.py | 78 +- stripe/api_resources/balance_transaction.py | 12 +- stripe/api_resources/bank_account.py | 142 ++- .../billing_portal/configuration.py | 96 +- .../api_resources/billing_portal/session.py | 71 +- stripe/api_resources/capability.py | 160 ++- stripe/api_resources/capital/__init__.py | 2 - .../api_resources/capital/financing_offer.py | 29 +- .../capital/financing_summary.py | 26 +- .../capital/financing_transaction.py | 33 +- stripe/api_resources/cash_balance.py | 9 +- stripe/api_resources/charge.py | 800 ++++++++++++- stripe/api_resources/checkout/session.py | 864 +++++++++++++- stripe/api_resources/confirmation_token.py | 643 ++++++++++- stripe/api_resources/country_spec.py | 18 +- stripe/api_resources/coupon.py | 18 +- stripe/api_resources/credit_note.py | 77 +- stripe/api_resources/credit_note_line_item.py | 41 +- stripe/api_resources/customer.py | 76 +- .../customer_cash_balance_transaction.py | 78 +- stripe/api_resources/customer_session.py | 2 - stripe/api_resources/dispute.py | 58 +- stripe/api_resources/event.py | 45 +- .../financial_connections/account.py | 66 +- .../account_inferred_balance.py | 2 - .../financial_connections/session.py | 49 +- .../financial_connections/transaction.py | 11 +- stripe/api_resources/funding_instructions.py | 53 +- stripe/api_resources/gift_cards/__init__.py | 2 - stripe/api_resources/gift_cards/card.py | 29 +- .../api_resources/gift_cards/transaction.py | 29 +- .../identity/verification_report.py | 131 ++- .../identity/verification_session.py | 81 +- stripe/api_resources/invoice.py | 602 +++++++++- stripe/api_resources/invoice_item.py | 9 +- stripe/api_resources/invoice_line_item.py | 57 +- stripe/api_resources/issuing/authorization.py | 107 +- stripe/api_resources/issuing/card.py | 1024 ++++++++++++++++- stripe/api_resources/issuing/cardholder.py | 1018 +++++++++++++++- stripe/api_resources/issuing/dispute.py | 91 +- .../issuing/personalization_design.py | 56 +- .../api_resources/issuing/physical_bundle.py | 11 +- stripe/api_resources/issuing/token.py | 94 +- stripe/api_resources/issuing/transaction.py | 89 +- stripe/api_resources/line_item.py | 39 +- stripe/api_resources/mandate.py | 100 +- stripe/api_resources/order.py | 473 +++++++- stripe/api_resources/payment_intent.py | 916 ++++++++++++++- stripe/api_resources/payment_link.py | 416 ++++++- stripe/api_resources/payment_method.py | 606 +++++++++- .../payment_method_configuration.py | 485 +++++++- stripe/api_resources/payment_method_domain.py | 48 +- stripe/api_resources/person.py | 251 +++- stripe/api_resources/plan.py | 18 +- stripe/api_resources/price.py | 77 +- stripe/api_resources/product.py | 36 +- stripe/api_resources/promotion_code.py | 16 +- stripe/api_resources/quote.py | 440 ++++++- stripe/api_resources/quote_line.py | 216 +++- stripe/api_resources/quote_phase.py | 59 +- stripe/api_resources/quote_preview_invoice.py | 612 +++++++++- .../quote_preview_subscription_schedule.py | 226 +++- stripe/api_resources/refund.py | 19 +- stripe/api_resources/reporting/report_run.py | 17 +- stripe/api_resources/review.py | 23 +- stripe/api_resources/setup_attempt.py | 397 ++++++- stripe/api_resources/setup_intent.py | 366 +++++- stripe/api_resources/shipping_rate.py | 34 +- .../sigma/scheduled_query_run.py | 8 +- stripe/api_resources/source.py | 384 ++++++- .../source_mandate_notification.py | 24 +- stripe/api_resources/source_transaction.py | 50 +- stripe/api_resources/subscription.py | 240 +++- stripe/api_resources/subscription_item.py | 17 +- stripe/api_resources/subscription_schedule.py | 216 +++- stripe/api_resources/tax/calculation.py | 211 +++- .../tax/calculation_line_item.py | 57 +- stripe/api_resources/tax/form.py | 50 +- stripe/api_resources/tax/registration.py | 409 ++++++- stripe/api_resources/tax/settings.py | 44 +- stripe/api_resources/tax/transaction.py | 171 ++- .../tax/transaction_line_item.py | 8 +- stripe/api_resources/tax_id.py | 10 +- .../api_resources/terminal/configuration.py | 130 ++- stripe/api_resources/terminal/location.py | 13 +- stripe/api_resources/terminal/reader.py | 157 ++- .../api_resources/treasury/credit_reversal.py | 8 +- .../api_resources/treasury/debit_reversal.py | 16 +- .../treasury/financial_account.py | 47 +- .../treasury/financial_account_features.py | 300 ++++- .../treasury/inbound_transfer.py | 73 +- .../treasury/outbound_payment.py | 81 +- .../treasury/outbound_transfer.py | 77 +- .../api_resources/treasury/received_credit.py | 98 +- .../api_resources/treasury/received_debit.py | 85 +- stripe/api_resources/treasury/transaction.py | 53 +- .../treasury/transaction_entry.py | 46 +- stripe/api_resources/usage_record_summary.py | 9 +- 101 files changed, 15957 insertions(+), 541 deletions(-) diff --git a/stripe/api_resources/account.py b/stripe/api_resources/account.py index ad5b42697..145c76737 100644 --- a/stripe/api_resources/account.py +++ b/stripe/api_resources/account.py @@ -8,15 +8,17 @@ UpdateableAPIResource, nested_resource_class_methods, ) +from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.file import File from stripe.api_resources.person import Person @@ -42,29 +44,468 @@ class Account( """ OBJECT_NAME = "account" - business_profile: Optional[StripeObject] + + class BusinessProfile(StripeObject): + class MonthlyEstimatedRevenue(StripeObject): + amount: int + currency: str + + class SupportAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + mcc: Optional[str] + monthly_estimated_revenue: Optional[MonthlyEstimatedRevenue] + name: Optional[str] + product_description: Optional[str] + support_address: Optional[SupportAddress] + support_email: Optional[str] + support_phone: Optional[str] + support_url: Optional[str] + url: Optional[str] + _inner_class_types = { + "monthly_estimated_revenue": MonthlyEstimatedRevenue, + "support_address": SupportAddress, + } + + class Capabilities(StripeObject): + acss_debit_payments: Optional[Literal["active", "inactive", "pending"]] + affirm_payments: Optional[Literal["active", "inactive", "pending"]] + afterpay_clearpay_payments: Optional[ + Literal["active", "inactive", "pending"] + ] + au_becs_debit_payments: Optional[ + Literal["active", "inactive", "pending"] + ] + bacs_debit_payments: Optional[Literal["active", "inactive", "pending"]] + bancontact_payments: Optional[Literal["active", "inactive", "pending"]] + bank_transfer_payments: Optional[ + Literal["active", "inactive", "pending"] + ] + blik_payments: Optional[Literal["active", "inactive", "pending"]] + boleto_payments: Optional[Literal["active", "inactive", "pending"]] + card_issuing: Optional[Literal["active", "inactive", "pending"]] + card_payments: Optional[Literal["active", "inactive", "pending"]] + cartes_bancaires_payments: Optional[ + Literal["active", "inactive", "pending"] + ] + cashapp_payments: Optional[Literal["active", "inactive", "pending"]] + eps_payments: Optional[Literal["active", "inactive", "pending"]] + fpx_payments: Optional[Literal["active", "inactive", "pending"]] + giropay_payments: Optional[Literal["active", "inactive", "pending"]] + grabpay_payments: Optional[Literal["active", "inactive", "pending"]] + ideal_payments: Optional[Literal["active", "inactive", "pending"]] + india_international_payments: Optional[ + Literal["active", "inactive", "pending"] + ] + jcb_payments: Optional[Literal["active", "inactive", "pending"]] + klarna_payments: Optional[Literal["active", "inactive", "pending"]] + konbini_payments: Optional[Literal["active", "inactive", "pending"]] + legacy_payments: Optional[Literal["active", "inactive", "pending"]] + link_payments: Optional[Literal["active", "inactive", "pending"]] + oxxo_payments: Optional[Literal["active", "inactive", "pending"]] + p24_payments: Optional[Literal["active", "inactive", "pending"]] + paynow_payments: Optional[Literal["active", "inactive", "pending"]] + paypal_payments: Optional[Literal["active", "inactive", "pending"]] + promptpay_payments: Optional[Literal["active", "inactive", "pending"]] + sepa_debit_payments: Optional[Literal["active", "inactive", "pending"]] + sofort_payments: Optional[Literal["active", "inactive", "pending"]] + tax_reporting_us_1099_k: Optional[ + Literal["active", "inactive", "pending"] + ] + tax_reporting_us_1099_misc: Optional[ + Literal["active", "inactive", "pending"] + ] + transfers: Optional[Literal["active", "inactive", "pending"]] + treasury: Optional[Literal["active", "inactive", "pending"]] + us_bank_account_ach_payments: Optional[ + Literal["active", "inactive", "pending"] + ] + zip_payments: Optional[Literal["active", "inactive", "pending"]] + + class Company(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class AddressKana(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + town: Optional[str] + + class AddressKanji(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + town: Optional[str] + + class OwnershipDeclaration(StripeObject): + date: Optional[int] + ip: Optional[str] + user_agent: Optional[str] + + class Verification(StripeObject): + class Document(StripeObject): + back: Optional[ExpandableField["File"]] + details: Optional[str] + details_code: Optional[str] + front: Optional[ExpandableField["File"]] + + document: Document + _inner_class_types = {"document": Document} + + address: Optional[Address] + address_kana: Optional[AddressKana] + address_kanji: Optional[AddressKanji] + directors_provided: Optional[bool] + executives_provided: Optional[bool] + export_license_id: Optional[str] + export_purpose_code: Optional[str] + name: Optional[str] + name_kana: Optional[str] + name_kanji: Optional[str] + owners_provided: Optional[bool] + ownership_declaration: Optional[OwnershipDeclaration] + phone: Optional[str] + structure: Optional[ + Literal[ + "free_zone_establishment", + "free_zone_llc", + "government_instrumentality", + "governmental_unit", + "incorporated_non_profit", + "incorporated_partnership", + "limited_liability_partnership", + "llc", + "multi_member_llc", + "private_company", + "private_corporation", + "private_partnership", + "public_company", + "public_corporation", + "public_partnership", + "single_member_llc", + "sole_establishment", + "sole_proprietorship", + "tax_exempt_government_instrumentality", + "unincorporated_association", + "unincorporated_non_profit", + "unincorporated_partnership", + ] + ] + tax_id_provided: Optional[bool] + tax_id_registrar: Optional[str] + vat_id_provided: Optional[bool] + verification: Optional[Verification] + _inner_class_types = { + "address": Address, + "address_kana": AddressKana, + "address_kanji": AddressKanji, + "ownership_declaration": OwnershipDeclaration, + "verification": Verification, + } + + class Controller(StripeObject): + class Application(StripeObject): + loss_liable: bool + onboarding_owner: bool + pricing_controls: bool + + class Dashboard(StripeObject): + type: Literal["express", "full", "none"] + + application: Optional[Application] + dashboard: Optional[Dashboard] + is_controller: Optional[bool] + type: Literal["account", "application"] + _inner_class_types = { + "application": Application, + "dashboard": Dashboard, + } + + class FutureRequirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + original_fields_due: List[str] + + class Error(StripeObject): + code: Literal[ + "invalid_address_city_state_postal_code", + "invalid_dob_age_under_18", + "invalid_representative_country", + "invalid_street_address", + "invalid_tos_acceptance", + "invalid_value_other", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_requires_additional_memorandum_of_associations", + ] + reason: str + requirement: str + + alternatives: Optional[List[Alternative]] + current_deadline: Optional[int] + currently_due: Optional[List[str]] + disabled_reason: Optional[str] + errors: Optional[List[Error]] + eventually_due: Optional[List[str]] + past_due: Optional[List[str]] + pending_verification: Optional[List[str]] + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + class Requirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + original_fields_due: List[str] + + class Error(StripeObject): + code: Literal[ + "invalid_address_city_state_postal_code", + "invalid_dob_age_under_18", + "invalid_representative_country", + "invalid_street_address", + "invalid_tos_acceptance", + "invalid_value_other", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_requires_additional_memorandum_of_associations", + ] + reason: str + requirement: str + + alternatives: Optional[List[Alternative]] + current_deadline: Optional[int] + currently_due: Optional[List[str]] + disabled_reason: Optional[str] + errors: Optional[List[Error]] + eventually_due: Optional[List[str]] + past_due: Optional[List[str]] + pending_verification: Optional[List[str]] + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + class Settings(StripeObject): + class BacsDebitPayments(StripeObject): + display_name: Optional[str] + + class Branding(StripeObject): + icon: Optional[ExpandableField["File"]] + logo: Optional[ExpandableField["File"]] + primary_color: Optional[str] + secondary_color: Optional[str] + + class CardIssuing(StripeObject): + class TosAcceptance(StripeObject): + date: Optional[int] + ip: Optional[str] + user_agent: Optional[str] + + tos_acceptance: Optional[TosAcceptance] + _inner_class_types = {"tos_acceptance": TosAcceptance} + + class CardPayments(StripeObject): + class DeclineOn(StripeObject): + avs_failure: bool + cvc_failure: bool + + decline_on: Optional[DeclineOn] + statement_descriptor_prefix: Optional[str] + statement_descriptor_prefix_kana: Optional[str] + statement_descriptor_prefix_kanji: Optional[str] + _inner_class_types = {"decline_on": DeclineOn} + + class Dashboard(StripeObject): + display_name: Optional[str] + timezone: Optional[str] + + class Payments(StripeObject): + statement_descriptor: Optional[str] + statement_descriptor_kana: Optional[str] + statement_descriptor_kanji: Optional[str] + statement_descriptor_prefix_kana: Optional[str] + statement_descriptor_prefix_kanji: Optional[str] + + class Payouts(StripeObject): + class Schedule(StripeObject): + delay_days: int + interval: str + monthly_anchor: Optional[int] + weekly_anchor: Optional[str] + + debit_negative_balances: bool + schedule: Schedule + statement_descriptor: Optional[str] + _inner_class_types = {"schedule": Schedule} + + class SepaDebitPayments(StripeObject): + creditor_id: Optional[str] + + class TaxForms(StripeObject): + consented_to_paperless_delivery: bool + + class Treasury(StripeObject): + class TosAcceptance(StripeObject): + date: Optional[int] + ip: Optional[str] + user_agent: Optional[str] + + tos_acceptance: Optional[TosAcceptance] + _inner_class_types = {"tos_acceptance": TosAcceptance} + + bacs_debit_payments: Optional[BacsDebitPayments] + branding: Branding + card_issuing: Optional[CardIssuing] + card_payments: CardPayments + dashboard: Dashboard + payments: Payments + payouts: Optional[Payouts] + sepa_debit_payments: Optional[SepaDebitPayments] + tax_forms: Optional[TaxForms] + treasury: Optional[Treasury] + _inner_class_types = { + "bacs_debit_payments": BacsDebitPayments, + "branding": Branding, + "card_issuing": CardIssuing, + "card_payments": CardPayments, + "dashboard": Dashboard, + "payments": Payments, + "payouts": Payouts, + "sepa_debit_payments": SepaDebitPayments, + "tax_forms": TaxForms, + "treasury": Treasury, + } + + class TosAcceptance(StripeObject): + date: Optional[int] + ip: Optional[str] + service_agreement: Optional[str] + user_agent: Optional[str] + + business_profile: Optional[BusinessProfile] business_type: Optional[ Literal["company", "government_entity", "individual", "non_profit"] ] - capabilities: Optional[StripeObject] + capabilities: Optional[Capabilities] charges_enabled: Optional[bool] - company: Optional[StripeObject] - controller: Optional[StripeObject] + company: Optional[Company] + controller: Optional[Controller] country: Optional[str] created: Optional[int] default_currency: Optional[str] details_submitted: Optional[bool] email: Optional[str] external_accounts: Optional[ListObject[Any]] - future_requirements: Optional[StripeObject] + future_requirements: Optional[FutureRequirements] id: str individual: Optional["Person"] metadata: Optional[Dict[str, str]] object: Literal["account"] payouts_enabled: Optional[bool] - requirements: Optional[StripeObject] - settings: Optional[StripeObject] - tos_acceptance: Optional[StripeObject] + requirements: Optional[Requirements] + settings: Optional[Settings] + tos_acceptance: Optional[TosAcceptance] type: Optional[Literal["custom", "express", "standard"]] deleted: Optional[Literal[True]] @@ -528,3 +969,14 @@ def list_persons( stripe_account=stripe_account, params=params, ) + + _inner_class_types = { + "business_profile": BusinessProfile, + "capabilities": Capabilities, + "company": Company, + "controller": Controller, + "future_requirements": FutureRequirements, + "requirements": Requirements, + "settings": Settings, + "tos_acceptance": TosAcceptance, + } diff --git a/stripe/api_resources/account_session.py b/stripe/api_resources/account_session.py index c15f10c14..518197d5c 100644 --- a/stripe/api_resources/account_session.py +++ b/stripe/api_resources/account_session.py @@ -18,9 +18,53 @@ class AccountSession(CreateableAPIResource["AccountSession"]): """ OBJECT_NAME = "account_session" + + class Components(StripeObject): + class AccountOnboarding(StripeObject): + enabled: bool + + class PaymentDetails(StripeObject): + class Features(StripeObject): + capture_payments: bool + dispute_management: bool + refund_management: bool + + enabled: bool + features: Optional[Features] + _inner_class_types = {"features": Features} + + class Payments(StripeObject): + class Features(StripeObject): + capture_payments: bool + dispute_management: bool + refund_management: bool + + enabled: bool + features: Optional[Features] + _inner_class_types = {"features": Features} + + class Payouts(StripeObject): + class Features(StripeObject): + pass + + enabled: bool + features: Optional[Features] + _inner_class_types = {"features": Features} + + account_onboarding: AccountOnboarding + payment_details: Optional[PaymentDetails] + payments: Optional[Payments] + payouts: Optional[Payouts] + _inner_class_types = { + "account_onboarding": AccountOnboarding, + "payment_details": PaymentDetails, + "payments": Payments, + "payouts": Payouts, + } + account: str client_secret: str - components: StripeObject + components: Components expires_at: int livemode: bool object: Literal["account_session"] @@ -46,3 +90,5 @@ def create( params, ), ) + + _inner_class_types = {"components": Components} diff --git a/stripe/api_resources/apps/secret.py b/stripe/api_resources/apps/secret.py index 431b2da8b..51d014f1c 100644 --- a/stripe/api_resources/apps/secret.py +++ b/stripe/api_resources/apps/secret.py @@ -24,6 +24,11 @@ class Secret(CreateableAPIResource["Secret"], ListableAPIResource["Secret"]): """ OBJECT_NAME = "apps.secret" + + class Scope(StripeObject): + type: Literal["account", "user"] + user: Optional[str] + created: int deleted: Optional[bool] expires_at: Optional[int] @@ -32,7 +37,7 @@ class Secret(CreateableAPIResource["Secret"], ListableAPIResource["Secret"]): name: str object: Literal["apps.secret"] payload: Optional[str] - scope: StripeObject + scope: Scope @classmethod def create( @@ -114,3 +119,5 @@ def list( ) return result + + _inner_class_types = {"scope": Scope} diff --git a/stripe/api_resources/balance.py b/stripe/api_resources/balance.py index 0293e1f05..63e22d207 100644 --- a/stripe/api_resources/balance.py +++ b/stripe/api_resources/balance.py @@ -22,13 +22,73 @@ class Balance(SingletonAPIResource["Balance"]): """ OBJECT_NAME = "balance" - available: List[StripeObject] - connect_reserved: Optional[List[StripeObject]] - instant_available: Optional[List[StripeObject]] - issuing: Optional[StripeObject] + + class Available(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + card: Optional[int] + fpx: Optional[int] + + amount: int + currency: str + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + class ConnectReserved(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + card: Optional[int] + fpx: Optional[int] + + amount: int + currency: str + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + class InstantAvailable(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + card: Optional[int] + fpx: Optional[int] + + amount: int + currency: str + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + class Issuing(StripeObject): + class Available(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + card: Optional[int] + fpx: Optional[int] + + amount: int + currency: str + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + available: List[Available] + _inner_class_types = {"available": Available} + + class Pending(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + card: Optional[int] + fpx: Optional[int] + + amount: int + currency: str + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + available: List[Available] + connect_reserved: Optional[List[ConnectReserved]] + instant_available: Optional[List[InstantAvailable]] + issuing: Optional[Issuing] livemode: bool object: Literal["balance"] - pending: List[StripeObject] + pending: List[Pending] @classmethod def retrieve(cls, **params: Any) -> "Balance": @@ -39,3 +99,11 @@ def retrieve(cls, **params: Any) -> "Balance": @classmethod def class_url(cls): return "/v1/balance" + + _inner_class_types = { + "available": Available, + "connect_reserved": ConnectReserved, + "instant_available": InstantAvailable, + "issuing": Issuing, + "pending": Pending, + } diff --git a/stripe/api_resources/balance_transaction.py b/stripe/api_resources/balance_transaction.py index e74303fa7..2261379c3 100644 --- a/stripe/api_resources/balance_transaction.py +++ b/stripe/api_resources/balance_transaction.py @@ -17,6 +17,14 @@ class BalanceTransaction(ListableAPIResource["BalanceTransaction"]): """ OBJECT_NAME = "balance_transaction" + + class FeeDetail(StripeObject): + amount: int + application: Optional[str] + currency: str + description: Optional[str] + type: str + amount: int available_on: int created: int @@ -24,7 +32,7 @@ class BalanceTransaction(ListableAPIResource["BalanceTransaction"]): description: Optional[str] exchange_rate: Optional[float] fee: int - fee_details: List[StripeObject] + fee_details: List[FeeDetail] id: str net: int object: Literal["balance_transaction"] @@ -105,3 +113,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"fee_details": FeeDetail} diff --git a/stripe/api_resources/bank_account.py b/stripe/api_resources/bank_account.py index 5b750fd99..b6618e48d 100644 --- a/stripe/api_resources/bank_account.py +++ b/stripe/api_resources/bank_account.py @@ -31,6 +31,139 @@ class BankAccount( """ OBJECT_NAME = "bank_account" + + class FutureRequirements(StripeObject): + class Error(StripeObject): + code: Literal[ + "invalid_address_city_state_postal_code", + "invalid_dob_age_under_18", + "invalid_representative_country", + "invalid_street_address", + "invalid_tos_acceptance", + "invalid_value_other", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_requires_additional_memorandum_of_associations", + ] + reason: str + requirement: str + + currently_due: Optional[List[str]] + errors: Optional[List[Error]] + past_due: Optional[List[str]] + pending_verification: Optional[List[str]] + _inner_class_types = {"errors": Error} + + class Requirements(StripeObject): + class Error(StripeObject): + code: Literal[ + "invalid_address_city_state_postal_code", + "invalid_dob_age_under_18", + "invalid_representative_country", + "invalid_street_address", + "invalid_tos_acceptance", + "invalid_value_other", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_requires_additional_memorandum_of_associations", + ] + reason: str + requirement: str + + currently_due: Optional[List[str]] + errors: Optional[List[Error]] + past_due: Optional[List[str]] + pending_verification: Optional[List[str]] + _inner_class_types = {"errors": Error} + account: Optional[ExpandableField["Account"]] account_holder_name: Optional[str] account_holder_type: Optional[str] @@ -42,12 +175,12 @@ class BankAccount( customer: Optional[ExpandableField["Customer"]] default_for_currency: Optional[bool] fingerprint: Optional[str] - future_requirements: Optional[StripeObject] + future_requirements: Optional[FutureRequirements] id: str last4: str metadata: Optional[Dict[str, str]] object: Literal["bank_account"] - requirements: Optional[StripeObject] + requirements: Optional[Requirements] routing_number: Optional[str] status: str deleted: Optional[Literal[True]] @@ -126,3 +259,8 @@ def retrieve( "stripe.Account.retrieve_external_account('account_id', 'bank_account_id') " "(see https://stripe.com/docs/api/external_account_bank_accounts/retrieve)." ) + + _inner_class_types = { + "future_requirements": FutureRequirements, + "requirements": Requirements, + } diff --git a/stripe/api_resources/billing_portal/configuration.py b/stripe/api_resources/billing_portal/configuration.py index 8daf3e369..98f88644e 100644 --- a/stripe/api_resources/billing_portal/configuration.py +++ b/stripe/api_resources/billing_portal/configuration.py @@ -8,7 +8,7 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus @@ -28,16 +28,98 @@ class Configuration( """ OBJECT_NAME = "billing_portal.configuration" + + class BusinessProfile(StripeObject): + headline: Optional[str] + privacy_policy_url: Optional[str] + terms_of_service_url: Optional[str] + + class Features(StripeObject): + class CustomerUpdate(StripeObject): + allowed_updates: List[ + Literal[ + "address", "email", "name", "phone", "shipping", "tax_id" + ] + ] + enabled: bool + + class InvoiceHistory(StripeObject): + enabled: bool + + class PaymentMethodUpdate(StripeObject): + enabled: bool + + class SubscriptionCancel(StripeObject): + class CancellationReason(StripeObject): + enabled: bool + options: List[ + Literal[ + "customer_service", + "low_quality", + "missing_features", + "other", + "switched_service", + "too_complex", + "too_expensive", + "unused", + ] + ] + + cancellation_reason: CancellationReason + enabled: bool + mode: Literal["at_period_end", "immediately"] + proration_behavior: Literal[ + "always_invoice", "create_prorations", "none" + ] + _inner_class_types = {"cancellation_reason": CancellationReason} + + class SubscriptionPause(StripeObject): + enabled: bool + + class SubscriptionUpdate(StripeObject): + class Product(StripeObject): + prices: List[str] + product: str + + default_allowed_updates: List[ + Literal["price", "promotion_code", "quantity"] + ] + enabled: bool + products: Optional[List[Product]] + proration_behavior: Literal[ + "always_invoice", "create_prorations", "none" + ] + _inner_class_types = {"products": Product} + + customer_update: CustomerUpdate + invoice_history: InvoiceHistory + payment_method_update: PaymentMethodUpdate + subscription_cancel: SubscriptionCancel + subscription_pause: SubscriptionPause + subscription_update: SubscriptionUpdate + _inner_class_types = { + "customer_update": CustomerUpdate, + "invoice_history": InvoiceHistory, + "payment_method_update": PaymentMethodUpdate, + "subscription_cancel": SubscriptionCancel, + "subscription_pause": SubscriptionPause, + "subscription_update": SubscriptionUpdate, + } + + class LoginPage(StripeObject): + enabled: bool + url: Optional[str] + active: bool application: Optional[ExpandableField["Application"]] - business_profile: StripeObject + business_profile: BusinessProfile created: int default_return_url: Optional[str] - features: StripeObject + features: Features id: str is_default: bool livemode: bool - login_page: StripeObject + login_page: LoginPage metadata: Optional[Dict[str, str]] object: Literal["billing_portal.configuration"] updated: int @@ -104,3 +186,9 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "business_profile": BusinessProfile, + "features": Features, + "login_page": LoginPage, + } diff --git a/stripe/api_resources/billing_portal/session.py b/stripe/api_resources/billing_portal/session.py index 114f68c84..4e63a70c2 100644 --- a/stripe/api_resources/billing_portal/session.py +++ b/stripe/api_resources/billing_portal/session.py @@ -3,7 +3,7 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject -from typing import Any, Optional, cast +from typing import Any, List, Optional, cast from typing_extensions import Literal from typing_extensions import TYPE_CHECKING @@ -31,10 +31,75 @@ class Session(CreateableAPIResource["Session"]): """ OBJECT_NAME = "billing_portal.session" + + class Flow(StripeObject): + class AfterCompletion(StripeObject): + class HostedConfirmation(StripeObject): + custom_message: Optional[str] + + class Redirect(StripeObject): + return_url: str + + hosted_confirmation: Optional[HostedConfirmation] + redirect: Optional[Redirect] + type: Literal["hosted_confirmation", "portal_homepage", "redirect"] + _inner_class_types = { + "hosted_confirmation": HostedConfirmation, + "redirect": Redirect, + } + + class SubscriptionCancel(StripeObject): + class Retention(StripeObject): + class CouponOffer(StripeObject): + coupon: str + + coupon_offer: Optional[CouponOffer] + type: Literal["coupon_offer"] + _inner_class_types = {"coupon_offer": CouponOffer} + + retention: Optional[Retention] + subscription: str + _inner_class_types = {"retention": Retention} + + class SubscriptionUpdate(StripeObject): + subscription: str + + class SubscriptionUpdateConfirm(StripeObject): + class Discount(StripeObject): + coupon: Optional[str] + promotion_code: Optional[str] + + class Item(StripeObject): + id: Optional[str] + price: Optional[str] + quantity: Optional[int] + + discounts: Optional[List[Discount]] + items: List[Item] + subscription: str + _inner_class_types = {"discounts": Discount, "items": Item} + + after_completion: AfterCompletion + subscription_cancel: Optional[SubscriptionCancel] + subscription_update: Optional[SubscriptionUpdate] + subscription_update_confirm: Optional[SubscriptionUpdateConfirm] + type: Literal[ + "payment_method_update", + "subscription_cancel", + "subscription_update", + "subscription_update_confirm", + ] + _inner_class_types = { + "after_completion": AfterCompletion, + "subscription_cancel": SubscriptionCancel, + "subscription_update": SubscriptionUpdate, + "subscription_update_confirm": SubscriptionUpdateConfirm, + } + configuration: ExpandableField["Configuration"] created: int customer: str - flow: Optional[StripeObject] + flow: Optional[Flow] id: str livemode: bool locale: Optional[ @@ -114,3 +179,5 @@ def create( params, ), ) + + _inner_class_types = {"flow": Flow} diff --git a/stripe/api_resources/capability.py b/stripe/api_resources/capability.py index 24ddd9688..1813d13e7 100644 --- a/stripe/api_resources/capability.py +++ b/stripe/api_resources/capability.py @@ -4,7 +4,7 @@ from stripe.api_resources.account import Account from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject -from typing import Optional +from typing import List, Optional from typing_extensions import Literal from urllib.parse import quote_plus @@ -17,13 +17,162 @@ class Capability(UpdateableAPIResource["Capability"]): """ OBJECT_NAME = "capability" + + class FutureRequirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + original_fields_due: List[str] + + class Error(StripeObject): + code: Literal[ + "invalid_address_city_state_postal_code", + "invalid_dob_age_under_18", + "invalid_representative_country", + "invalid_street_address", + "invalid_tos_acceptance", + "invalid_value_other", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_requires_additional_memorandum_of_associations", + ] + reason: str + requirement: str + + alternatives: Optional[List[Alternative]] + current_deadline: Optional[int] + currently_due: List[str] + disabled_reason: Optional[str] + errors: List[Error] + eventually_due: List[str] + past_due: List[str] + pending_verification: List[str] + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + class Requirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + original_fields_due: List[str] + + class Error(StripeObject): + code: Literal[ + "invalid_address_city_state_postal_code", + "invalid_dob_age_under_18", + "invalid_representative_country", + "invalid_street_address", + "invalid_tos_acceptance", + "invalid_value_other", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_requires_additional_memorandum_of_associations", + ] + reason: str + requirement: str + + alternatives: Optional[List[Alternative]] + current_deadline: Optional[int] + currently_due: List[str] + disabled_reason: Optional[str] + errors: List[Error] + eventually_due: List[str] + past_due: List[str] + pending_verification: List[str] + _inner_class_types = {"alternatives": Alternative, "errors": Error} + account: ExpandableField["Account"] - future_requirements: Optional[StripeObject] + future_requirements: Optional[FutureRequirements] id: str object: Literal["capability"] requested: bool requested_at: Optional[int] - requirements: Optional[StripeObject] + requirements: Optional[Requirements] status: Literal["active", "disabled", "inactive", "pending", "unrequested"] def instance_url(self): @@ -49,3 +198,8 @@ def retrieve(cls, id, api_key=None, **params): "Can't retrieve a capability without an account ID. Retrieve a capability using " "account.retrieve_capability('acct_123', 'acap_123')" ) + + _inner_class_types = { + "future_requirements": FutureRequirements, + "requirements": Requirements, + } diff --git a/stripe/api_resources/capital/__init__.py b/stripe/api_resources/capital/__init__.py index 1a5fb9337..983affbe6 100644 --- a/stripe/api_resources/capital/__init__.py +++ b/stripe/api_resources/capital/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.capital.financing_offer import FinancingOffer diff --git a/stripe/api_resources/capital/financing_offer.py b/stripe/api_resources/capital/financing_offer.py index 792d08849..88453c705 100644 --- a/stripe/api_resources/capital/financing_offer.py +++ b/stripe/api_resources/capital/financing_offer.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject @@ -17,7 +15,25 @@ class FinancingOffer(ListableAPIResource["FinancingOffer"]): """ OBJECT_NAME = "capital.financing_offer" - accepted_terms: Optional[StripeObject] + + class AcceptedTerms(StripeObject): + advance_amount: int + currency: str + fee_amount: int + previous_financing_fee_discount_amount: Optional[int] + withhold_rate: float + + class OfferedTerms(StripeObject): + advance_amount: int + campaign_type: Literal[ + "newly_eligible_user", "previously_eligible_user", "repeat_user" + ] + currency: str + fee_amount: int + previous_financing_fee_discount_rate: Optional[float] + withhold_rate: float + + accepted_terms: Optional[AcceptedTerms] account: str created: int expires_after: float @@ -26,7 +42,7 @@ class FinancingOffer(ListableAPIResource["FinancingOffer"]): livemode: bool metadata: Optional[Dict[str, str]] object: Literal["capital.financing_offer"] - offered_terms: Optional[StripeObject] + offered_terms: Optional[OfferedTerms] product_type: Optional[Literal["refill", "standard"]] replacement: Optional[str] replacement_for: Optional[str] @@ -109,3 +125,8 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "accepted_terms": AcceptedTerms, + "offered_terms": OfferedTerms, + } diff --git a/stripe/api_resources/capital/financing_summary.py b/stripe/api_resources/capital/financing_summary.py index 05b43eaad..8117f300c 100644 --- a/stripe/api_resources/capital/financing_summary.py +++ b/stripe/api_resources/capital/financing_summary.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import SingletonAPIResource from stripe.stripe_object import StripeObject from typing import Any, Optional @@ -15,7 +13,27 @@ class FinancingSummary(SingletonAPIResource["FinancingSummary"]): """ OBJECT_NAME = "capital.financing_summary" - details: Optional[StripeObject] + + class Details(StripeObject): + class CurrentRepaymentInterval(StripeObject): + due_at: int + paid_amount: Optional[int] + remaining_amount: int + + advance_amount: int + advance_paid_out_at: Optional[int] + currency: str + current_repayment_interval: Optional[CurrentRepaymentInterval] + fee_amount: int + paid_amount: int + remaining_amount: int + repayments_begin_at: Optional[int] + withhold_rate: float + _inner_class_types = { + "current_repayment_interval": CurrentRepaymentInterval, + } + + details: Optional[Details] financing_offer: Optional[str] object: Literal["capital.financing_summary"] status: Optional[Literal["accepted", "delivered", "none"]] @@ -29,3 +47,5 @@ def retrieve(cls, **params: Any) -> "FinancingSummary": @classmethod def class_url(cls): return "/v1/capital/financing_summary" + + _inner_class_types = {"details": Details} diff --git a/stripe/api_resources/capital/financing_transaction.py b/stripe/api_resources/capital/financing_transaction.py index 18277e77e..c71f3d26d 100644 --- a/stripe/api_resources/capital/financing_transaction.py +++ b/stripe/api_resources/capital/financing_transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject @@ -15,9 +13,36 @@ class FinancingTransaction(ListableAPIResource["FinancingTransaction"]): """ OBJECT_NAME = "capital.financing_transaction" + + class Details(StripeObject): + class Transaction(StripeObject): + charge: Optional[str] + treasury_transaction: Optional[str] + + advance_amount: int + currency: str + fee_amount: int + linked_payment: Optional[str] + reason: Optional[ + Literal[ + "automatic_withholding", + "automatic_withholding_refund", + "collection", + "collection_failure", + "financing_cancellation", + "refill", + "requested_by_user", + "user_initiated", + ] + ] + reversed_transaction: Optional[str] + total_amount: int + transaction: Optional[Transaction] + _inner_class_types = {"transaction": Transaction} + account: str created_at: int - details: StripeObject + details: Details financing_offer: Optional[str] id: str legacy_balance_transaction_source: Optional[str] @@ -58,3 +83,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"details": Details} diff --git a/stripe/api_resources/cash_balance.py b/stripe/api_resources/cash_balance.py index 5773ad1d6..6f1118c85 100644 --- a/stripe/api_resources/cash_balance.py +++ b/stripe/api_resources/cash_balance.py @@ -13,11 +13,16 @@ class CashBalance(StripeObject): """ OBJECT_NAME = "cash_balance" + + class Settings(StripeObject): + reconciliation_mode: Literal["automatic", "manual"] + using_merchant_default: bool + available: Optional[Dict[str, int]] customer: str livemode: bool object: Literal["cash_balance"] - settings: StripeObject + settings: Settings def instance_url(self): customer = self.customer @@ -31,3 +36,5 @@ def retrieve(cls, id, api_key=None, **params): "Can't retrieve a Customer Cash Balance without a Customer ID. " "Use Customer.retrieve_cash_balance('cus_123')" ) + + _inner_class_types = {"settings": Settings} diff --git a/stripe/api_resources/charge.py b/stripe/api_resources/charge.py index 19ce92228..0d417e8dd 100644 --- a/stripe/api_resources/charge.py +++ b/stripe/api_resources/charge.py @@ -11,7 +11,7 @@ from stripe.api_resources.list_object import ListObject from stripe.api_resources.search_result_object import SearchResultObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus @@ -24,7 +24,9 @@ from stripe.api_resources.balance_transaction import BalanceTransaction from stripe.api_resources.customer import Customer from stripe.api_resources.invoice import Invoice + from stripe.api_resources.mandate import Mandate from stripe.api_resources.payment_intent import PaymentIntent + from stripe.api_resources.payment_method import PaymentMethod from stripe.api_resources.refund import Refund from stripe.api_resources.review import Review from stripe.api_resources.transfer import Transfer @@ -44,6 +46,775 @@ class Charge( """ OBJECT_NAME = "charge" + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + email: Optional[str] + name: Optional[str] + phone: Optional[str] + _inner_class_types = {"address": Address} + + class FraudDetails(StripeObject): + stripe_report: Optional[str] + user_report: Optional[str] + + class Level3(StripeObject): + class LineItem(StripeObject): + discount_amount: Optional[int] + product_code: str + product_description: str + quantity: Optional[int] + tax_amount: Optional[int] + unit_cost: Optional[int] + + customer_reference: Optional[str] + line_items: List[LineItem] + merchant_reference: str + shipping_address_zip: Optional[str] + shipping_amount: Optional[int] + shipping_from_zip: Optional[str] + _inner_class_types = {"line_items": LineItem} + + class Outcome(StripeObject): + class Rule(StripeObject): + action: str + id: str + predicate: str + + network_status: Optional[str] + reason: Optional[str] + risk_level: Optional[str] + risk_score: Optional[int] + rule: Optional[ExpandableField[Rule]] + seller_message: Optional[str] + type: str + _inner_class_types = {"rule": Rule} + + class PaymentMethodDetails(StripeObject): + class AchCreditTransfer(StripeObject): + account_number: Optional[str] + bank_name: Optional[str] + routing_number: Optional[str] + swift_code: Optional[str] + + class AchDebit(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + bank_name: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + + class AcssDebit(StripeObject): + bank_name: Optional[str] + fingerprint: Optional[str] + institution_number: Optional[str] + last4: Optional[str] + mandate: Optional[str] + transit_number: Optional[str] + + class Affirm(StripeObject): + pass + + class AfterpayClearpay(StripeObject): + order_id: Optional[str] + reference: Optional[str] + + class Alipay(StripeObject): + buyer_id: Optional[str] + fingerprint: Optional[str] + transaction_id: Optional[str] + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + mandate: Optional[str] + + class BacsDebit(StripeObject): + fingerprint: Optional[str] + last4: Optional[str] + mandate: Optional[str] + sort_code: Optional[str] + + class Bancontact(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + iban_last4: Optional[str] + preferred_language: Optional[Literal["de", "en", "fr", "nl"]] + verified_name: Optional[str] + + class Blik(StripeObject): + pass + + class Boleto(StripeObject): + tax_id: str + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[str] + address_postal_code_check: Optional[str] + cvc_check: Optional[str] + + class ExtendedAuthorization(StripeObject): + status: Literal["disabled", "enabled"] + + class IncrementalAuthorization(StripeObject): + status: Literal["available", "unavailable"] + + class Installments(StripeObject): + class Plan(StripeObject): + count: Optional[int] + interval: Optional[Literal["month"]] + type: Literal["fixed_count"] + + plan: Optional[Plan] + _inner_class_types = {"plan": Plan} + + class Multicapture(StripeObject): + status: Literal["available", "unavailable"] + + class NetworkToken(StripeObject): + used: bool + + class Overcapture(StripeObject): + maximum_amount_capturable: int + status: Literal["available", "unavailable"] + + class ThreeDSecure(StripeObject): + authentication_flow: Optional[ + Literal["challenge", "frictionless"] + ] + result: Optional[ + Literal[ + "attempt_acknowledged", + "authenticated", + "exempted", + "failed", + "not_supported", + "processing_error", + ] + ] + result_reason: Optional[ + Literal[ + "abandoned", + "bypassed", + "canceled", + "card_not_enrolled", + "network_not_supported", + "protocol_error", + "rejected", + ] + ] + version: Optional[Literal["1.0.2", "2.1.0", "2.2.0"]] + + class Wallet(StripeObject): + class AmexExpressCheckout(StripeObject): + pass + + class ApplePay(StripeObject): + pass + + class GooglePay(StripeObject): + pass + + class Link(StripeObject): + pass + + class Masterpass(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class ShippingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + billing_address: Optional[BillingAddress] + email: Optional[str] + name: Optional[str] + shipping_address: Optional[ShippingAddress] + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + class SamsungPay(StripeObject): + pass + + class VisaCheckout(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class ShippingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + billing_address: Optional[BillingAddress] + email: Optional[str] + name: Optional[str] + shipping_address: Optional[ShippingAddress] + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + amex_express_checkout: Optional[AmexExpressCheckout] + apple_pay: Optional[ApplePay] + dynamic_last4: Optional[str] + google_pay: Optional[GooglePay] + link: Optional[Link] + masterpass: Optional[Masterpass] + samsung_pay: Optional[SamsungPay] + type: Literal[ + "amex_express_checkout", + "apple_pay", + "google_pay", + "link", + "masterpass", + "samsung_pay", + "visa_checkout", + ] + visa_checkout: Optional[VisaCheckout] + _inner_class_types = { + "amex_express_checkout": AmexExpressCheckout, + "apple_pay": ApplePay, + "google_pay": GooglePay, + "link": Link, + "masterpass": Masterpass, + "samsung_pay": SamsungPay, + "visa_checkout": VisaCheckout, + } + + amount_authorized: Optional[int] + brand: Optional[str] + checks: Optional[Checks] + country: Optional[str] + description: Optional[str] + exp_month: int + exp_year: int + extended_authorization: Optional[ExtendedAuthorization] + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + incremental_authorization: Optional[IncrementalAuthorization] + installments: Optional[Installments] + issuer: Optional[str] + last4: Optional[str] + mandate: Optional[str] + moto: Optional[bool] + multicapture: Optional[Multicapture] + network: Optional[str] + network_token: Optional[NetworkToken] + overcapture: Optional[Overcapture] + three_d_secure: Optional[ThreeDSecure] + wallet: Optional[Wallet] + _inner_class_types = { + "checks": Checks, + "extended_authorization": ExtendedAuthorization, + "incremental_authorization": IncrementalAuthorization, + "installments": Installments, + "multicapture": Multicapture, + "network_token": NetworkToken, + "overcapture": Overcapture, + "three_d_secure": ThreeDSecure, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "credit", "prepaid", "unknown"] + ] + application_cryptogram: Optional[str] + application_preferred_name: Optional[str] + authorization_code: Optional[str] + authorization_response_code: Optional[str] + cardholder_verification_method: Optional[str] + dedicated_file_name: Optional[str] + terminal_verification_results: Optional[str] + transaction_status_information: Optional[str] + + amount_authorized: Optional[int] + brand: Optional[str] + capture_before: Optional[int] + cardholder_name: Optional[str] + country: Optional[str] + description: Optional[str] + emv_auth_data: Optional[str] + exp_month: int + exp_year: int + fingerprint: Optional[str] + funding: Optional[str] + generated_card: Optional[str] + iin: Optional[str] + incremental_authorization_supported: bool + issuer: Optional[str] + last4: Optional[str] + network: Optional[str] + overcapture_supported: bool + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + receipt: Optional[Receipt] + _inner_class_types = {"receipt": Receipt} + + class Cashapp(StripeObject): + buyer_id: Optional[str] + cashtag: Optional[str] + + class CustomerBalance(StripeObject): + pass + + class Eps(StripeObject): + bank: Optional[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + verified_name: Optional[str] + + class Fpx(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + transaction_id: Optional[str] + + class Giropay(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + verified_name: Optional[str] + + class Grabpay(StripeObject): + transaction_id: Optional[str] + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + iban_last4: Optional[str] + verified_name: Optional[str] + + class InteracPresent(StripeObject): + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "savings", "unknown"] + ] + application_cryptogram: Optional[str] + application_preferred_name: Optional[str] + authorization_code: Optional[str] + authorization_response_code: Optional[str] + cardholder_verification_method: Optional[str] + dedicated_file_name: Optional[str] + terminal_verification_results: Optional[str] + transaction_status_information: Optional[str] + + brand: Optional[str] + cardholder_name: Optional[str] + country: Optional[str] + description: Optional[str] + emv_auth_data: Optional[str] + exp_month: int + exp_year: int + fingerprint: Optional[str] + funding: Optional[str] + generated_card: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + network: Optional[str] + preferred_locales: Optional[List[str]] + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + receipt: Optional[Receipt] + _inner_class_types = {"receipt": Receipt} + + class Klarna(StripeObject): + payment_method_category: Optional[str] + preferred_locale: Optional[str] + + class Konbini(StripeObject): + class Store(StripeObject): + chain: Optional[ + Literal["familymart", "lawson", "ministop", "seicomart"] + ] + + store: Optional[Store] + _inner_class_types = {"store": Store} + + class Link(StripeObject): + country: Optional[str] + + class Multibanco(StripeObject): + entity: Optional[str] + reference: Optional[str] + + class Oxxo(StripeObject): + number: Optional[str] + + class P24(StripeObject): + bank: Optional[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "volkswagen_bank", + ] + ] + reference: Optional[str] + verified_name: Optional[str] + + class Paynow(StripeObject): + reference: Optional[str] + + class Paypal(StripeObject): + class SellerProtection(StripeObject): + dispute_categories: Optional[ + List[Literal["fraudulent", "product_not_received"]] + ] + status: Literal[ + "eligible", "not_eligible", "partially_eligible" + ] + + class Shipping(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class VerifiedAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + payer_email: Optional[str] + payer_id: Optional[str] + payer_name: Optional[str] + seller_protection: Optional[SellerProtection] + shipping: Optional[Shipping] + transaction_id: Optional[str] + verified_address: Optional[VerifiedAddress] + verified_email: Optional[str] + verified_name: Optional[str] + _inner_class_types = { + "seller_protection": SellerProtection, + "shipping": Shipping, + "verified_address": VerifiedAddress, + } + + class Pix(StripeObject): + bank_transaction_id: Optional[str] + + class Promptpay(StripeObject): + reference: Optional[str] + + class SepaCreditTransfer(StripeObject): + bank_name: Optional[str] + bic: Optional[str] + iban: Optional[str] + + class SepaDebit(StripeObject): + bank_code: Optional[str] + branch_code: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + mandate: Optional[str] + + class Sofort(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + country: Optional[str] + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + iban_last4: Optional[str] + preferred_language: Optional[ + Literal["de", "en", "es", "fr", "it", "nl", "pl"] + ] + verified_name: Optional[str] + + class StripeAccount(StripeObject): + pass + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + account_type: Optional[Literal["checking", "savings"]] + bank_name: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + + class Wechat(StripeObject): + pass + + class WechatPay(StripeObject): + fingerprint: Optional[str] + transaction_id: Optional[str] + + class Zip(StripeObject): + pass + + ach_credit_transfer: Optional[AchCreditTransfer] + ach_debit: Optional[AchDebit] + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + link: Optional[Link] + multibanco: Optional[Multibanco] + oxxo: Optional[Oxxo] + p24: Optional[P24] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + sepa_credit_transfer: Optional[SepaCreditTransfer] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + stripe_account: Optional[StripeAccount] + type: str + us_bank_account: Optional[UsBankAccount] + wechat: Optional[Wechat] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "ach_credit_transfer": AchCreditTransfer, + "ach_debit": AchDebit, + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "klarna": Klarna, + "konbini": Konbini, + "link": Link, + "multibanco": Multibanco, + "oxxo": Oxxo, + "p24": P24, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "sepa_credit_transfer": SepaCreditTransfer, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "stripe_account": StripeAccount, + "us_bank_account": UsBankAccount, + "wechat": Wechat, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class RadarOptions(StripeObject): + session: Optional[str] + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + class TransferData(StripeObject): + amount: Optional[int] + destination: ExpandableField["Account"] + amount: int amount_captured: int amount_refunded: int @@ -52,7 +823,7 @@ class Charge( application_fee_amount: Optional[int] authorization_code: Optional[str] balance_transaction: Optional[ExpandableField["BalanceTransaction"]] - billing_details: StripeObject + billing_details: BillingDetails calculated_statement_descriptor: Optional[str] captured: bool created: int @@ -65,34 +836,34 @@ class Charge( ] failure_code: Optional[str] failure_message: Optional[str] - fraud_details: Optional[StripeObject] + fraud_details: Optional[FraudDetails] id: str invoice: Optional[ExpandableField["Invoice"]] - level3: Optional[StripeObject] + level3: Optional[Level3] livemode: bool metadata: Dict[str, str] object: Literal["charge"] on_behalf_of: Optional[ExpandableField["Account"]] - outcome: Optional[StripeObject] + outcome: Optional[Outcome] paid: bool payment_intent: Optional[ExpandableField["PaymentIntent"]] payment_method: Optional[str] - payment_method_details: Optional[StripeObject] - radar_options: Optional[StripeObject] + payment_method_details: Optional[PaymentMethodDetails] + radar_options: Optional[RadarOptions] receipt_email: Optional[str] receipt_number: Optional[str] receipt_url: Optional[str] refunded: bool refunds: Optional[ListObject["Refund"]] review: Optional[ExpandableField["Review"]] - shipping: Optional[StripeObject] + shipping: Optional[Shipping] source: Optional[Any] source_transfer: Optional[ExpandableField["Transfer"]] statement_descriptor: Optional[str] statement_descriptor_suffix: Optional[str] status: Literal["failed", "pending", "succeeded"] transfer: Optional[ExpandableField["Transfer"]] - transfer_data: Optional[StripeObject] + transfer_data: Optional[TransferData] transfer_group: Optional[str] @classmethod @@ -210,3 +981,14 @@ def mark_as_safe(self, idempotency_key=None): headers = util.populate_headers(idempotency_key) self.refresh_from(self.request("post", url, params, headers)) return self + + _inner_class_types = { + "billing_details": BillingDetails, + "fraud_details": FraudDetails, + "level3": Level3, + "outcome": Outcome, + "payment_method_details": PaymentMethodDetails, + "radar_options": RadarOptions, + "shipping": Shipping, + "transfer_data": TransferData, + } diff --git a/stripe/api_resources/checkout/session.py b/stripe/api_resources/checkout/session.py index d0348d2b9..cd1f81292 100644 --- a/stripe/api_resources/checkout/session.py +++ b/stripe/api_resources/checkout/session.py @@ -14,13 +14,18 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.account import Account from stripe.api_resources.customer import Customer + from stripe.api_resources.discount import Discount as DiscountResource from stripe.api_resources.invoice import Invoice from stripe.api_resources.line_item import LineItem from stripe.api_resources.payment_intent import PaymentIntent from stripe.api_resources.payment_link import PaymentLink from stripe.api_resources.setup_intent import SetupIntent + from stripe.api_resources.shipping_rate import ShippingRate from stripe.api_resources.subscription import Subscription + from stripe.api_resources.tax_id import TaxId as TaxIdResource + from stripe.api_resources.tax_rate import TaxRate class Session( @@ -44,30 +49,825 @@ class Session( """ OBJECT_NAME = "checkout.session" - after_expiration: Optional[StripeObject] + + class AfterExpiration(StripeObject): + class Recovery(StripeObject): + allow_promotion_codes: bool + enabled: bool + expires_at: Optional[int] + url: Optional[str] + + recovery: Optional[Recovery] + _inner_class_types = {"recovery": Recovery} + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + status: Optional[ + Literal["complete", "failed", "requires_location_inputs"] + ] + _inner_class_types = {"liability": Liability} + + class Consent(StripeObject): + promotions: Optional[Literal["opt_in", "opt_out"]] + terms_of_service: Optional[Literal["accepted"]] + + class ConsentCollection(StripeObject): + promotions: Optional[Literal["auto", "none"]] + terms_of_service: Optional[Literal["none", "required"]] + + class CurrencyConversion(StripeObject): + amount_subtotal: int + amount_total: int + fx_rate: float + source_currency: str + + class CustomField(StripeObject): + class Dropdown(StripeObject): + class Option(StripeObject): + label: str + value: str + + options: List[Option] + value: Optional[str] + _inner_class_types = {"options": Option} + + class Label(StripeObject): + custom: Optional[str] + type: Literal["custom"] + + class Numeric(StripeObject): + maximum_length: Optional[int] + minimum_length: Optional[int] + value: Optional[str] + + class Text(StripeObject): + maximum_length: Optional[int] + minimum_length: Optional[int] + value: Optional[str] + + dropdown: Optional[Dropdown] + key: str + label: Label + numeric: Optional[Numeric] + optional: bool + text: Optional[Text] + type: Literal["dropdown", "numeric", "text"] + _inner_class_types = { + "dropdown": Dropdown, + "label": Label, + "numeric": Numeric, + "text": Text, + } + + class CustomText(StripeObject): + class ShippingAddress(StripeObject): + message: str + + class Submit(StripeObject): + message: str + + class TermsOfServiceAcceptance(StripeObject): + message: str + + shipping_address: Optional[ShippingAddress] + submit: Optional[Submit] + terms_of_service_acceptance: Optional[TermsOfServiceAcceptance] + _inner_class_types = { + "shipping_address": ShippingAddress, + "submit": Submit, + "terms_of_service_acceptance": TermsOfServiceAcceptance, + } + + class CustomerDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class TaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "ar_cuit", + "au_abn", + "au_arn", + "bg_uic", + "bo_tin", + "br_cnpj", + "br_cpf", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "ch_vat", + "cl_tin", + "cn_tin", + "co_nit", + "cr_tin", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "hk_br", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kr_brn", + "li_uid", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "no_vat", + "nz_gst", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sv_nit", + "th_vat", + "tr_tin", + "tw_vat", + "ua_vat", + "unknown", + "us_ein", + "uy_ruc", + "ve_rif", + "vn_tin", + "za_vat", + ] + value: Optional[str] + + address: Optional[Address] + email: Optional[str] + name: Optional[str] + phone: Optional[str] + tax_exempt: Optional[Literal["exempt", "none", "reverse"]] + tax_ids: Optional[List[TaxId]] + _inner_class_types = {"address": Address, "tax_ids": TaxId} + + class InvoiceCreation(StripeObject): + class InvoiceData(StripeObject): + class CustomField(StripeObject): + name: str + value: str + + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + class RenderingOptions(StripeObject): + amount_tax_display: Optional[str] + + account_tax_ids: Optional[List[ExpandableField["TaxIdResource"]]] + custom_fields: Optional[List[CustomField]] + description: Optional[str] + footer: Optional[str] + issuer: Optional[Issuer] + metadata: Optional[Dict[str, str]] + rendering_options: Optional[RenderingOptions] + _inner_class_types = { + "custom_fields": CustomField, + "issuer": Issuer, + "rendering_options": RenderingOptions, + } + + enabled: bool + invoice_data: InvoiceData + _inner_class_types = {"invoice_data": InvoiceData} + + class PaymentMethodConfigurationDetails(StripeObject): + id: str + parent: Optional[str] + + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + custom_mandate_url: Optional[str] + default_for: Optional[List[Literal["invoice", "subscription"]]] + interval_description: Optional[str] + payment_schedule: Optional[ + Literal["combined", "interval", "sporadic"] + ] + transaction_type: Optional[Literal["business", "personal"]] + + currency: Optional[Literal["cad", "usd"]] + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Affirm(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class AfterpayClearpay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Alipay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class AuBecsDebit(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class BacsDebit(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class Bancontact(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Boleto(StripeObject): + expires_after_days: int + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class Card(StripeObject): + class Installments(StripeObject): + enabled: Optional[bool] + + installments: Optional[Installments] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + statement_descriptor_suffix_kana: Optional[str] + statement_descriptor_suffix_kanji: Optional[str] + _inner_class_types = {"installments": Installments} + + class Cashapp(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + + eu_bank_transfer: Optional[EuBankTransfer] + requested_address_types: Optional[ + List[ + Literal[ + "aba", + "iban", + "sepa", + "sort_code", + "spei", + "swift", + "zengin", + ] + ] + ] + type: Optional[ + Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + ] + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + setup_future_usage: Optional[Literal["none"]] + _inner_class_types = {"bank_transfer": BankTransfer} + + class Eps(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Fpx(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Giropay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Grabpay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Ideal(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Klarna(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class Konbini(StripeObject): + expires_after_days: Optional[int] + setup_future_usage: Optional[Literal["none"]] + + class Link(StripeObject): + setup_future_usage: Optional[Literal["none", "off_session"]] + + class Oxxo(StripeObject): + expires_after_days: int + setup_future_usage: Optional[Literal["none"]] + + class P24(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Paynow(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Pix(StripeObject): + expires_after_seconds: Optional[int] + + class SepaDebit(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class Sofort(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + class ManualEntry(StripeObject): + mode: Optional[Literal["automatic", "custom"]] + + manual_entry: Optional[ManualEntry] + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + prefetch: Optional[ + List[ + Literal[ + "balances", + "inferred_balances", + "ownership", + "transactions", + ] + ] + ] + return_url: Optional[str] + _inner_class_types = {"manual_entry": ManualEntry} + + financial_connections: Optional[FinancialConnections] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + verification_method: Optional[Literal["automatic", "instant"]] + _inner_class_types = { + "financial_connections": FinancialConnections + } + + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + boleto: Optional[Boleto] + card: Optional[Card] + cashapp: Optional[Cashapp] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + link: Optional[Link] + oxxo: Optional[Oxxo] + p24: Optional[P24] + paynow: Optional[Paynow] + pix: Optional[Pix] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "boleto": Boleto, + "card": Card, + "cashapp": Cashapp, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "klarna": Klarna, + "konbini": Konbini, + "link": Link, + "oxxo": Oxxo, + "p24": P24, + "paynow": Paynow, + "pix": Pix, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "us_bank_account": UsBankAccount, + } + + class PhoneNumberCollection(StripeObject): + enabled: bool + + class ShippingAddressCollection(StripeObject): + allowed_countries: List[ + Literal[ + "AC", + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CV", + "CW", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MK", + "ML", + "MM", + "MN", + "MO", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SZ", + "TA", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + "ZZ", + ] + ] + + class ShippingCost(StripeObject): + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + amount_subtotal: int + amount_tax: int + amount_total: int + shipping_rate: Optional[ExpandableField["ShippingRate"]] + taxes: Optional[List[Tax]] + _inner_class_types = {"taxes": Tax} + + class ShippingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + class ShippingOption(StripeObject): + shipping_amount: int + shipping_rate: ExpandableField["ShippingRate"] + + class TaxIdCollection(StripeObject): + enabled: bool + + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + discount: "DiscountResource" + + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + discounts: List[Discount] + taxes: List[Tax] + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + amount_shipping: Optional[int] + amount_tax: int + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + + after_expiration: Optional[AfterExpiration] allow_promotion_codes: Optional[bool] amount_subtotal: Optional[int] amount_total: Optional[int] - automatic_tax: StripeObject + automatic_tax: AutomaticTax billing_address_collection: Optional[Literal["auto", "required"]] cancel_url: Optional[str] client_reference_id: Optional[str] - client_secret: Optional[str] - consent: Optional[StripeObject] - consent_collection: Optional[StripeObject] + consent: Optional[Consent] + consent_collection: Optional[ConsentCollection] created: int currency: Optional[str] - currency_conversion: Optional[StripeObject] - custom_fields: List[StripeObject] - custom_text: StripeObject + currency_conversion: Optional[CurrencyConversion] + custom_fields: List[CustomField] + custom_text: CustomText customer: Optional[ExpandableField["Customer"]] customer_creation: Optional[Literal["always", "if_required"]] - customer_details: Optional[StripeObject] + customer_details: Optional[CustomerDetails] customer_email: Optional[str] expires_at: int id: str invoice: Optional[ExpandableField["Invoice"]] - invoice_creation: Optional[StripeObject] + invoice_creation: Optional[InvoiceCreation] line_items: Optional[ListObject["LineItem"]] livemode: bool locale: Optional[ @@ -121,26 +921,25 @@ class Session( payment_intent: Optional[ExpandableField["PaymentIntent"]] payment_link: Optional[ExpandableField["PaymentLink"]] payment_method_collection: Optional[Literal["always", "if_required"]] - payment_method_configuration_details: Optional[StripeObject] - payment_method_options: Optional[StripeObject] + payment_method_configuration_details: Optional[ + PaymentMethodConfigurationDetails + ] + payment_method_options: Optional[PaymentMethodOptions] payment_method_types: List[str] payment_status: Literal["no_payment_required", "paid", "unpaid"] - phone_number_collection: Optional[StripeObject] + phone_number_collection: Optional[PhoneNumberCollection] recovered_from: Optional[str] - redirect_on_completion: Optional[Literal["always", "if_required", "never"]] - return_url: Optional[str] setup_intent: Optional[ExpandableField["SetupIntent"]] - shipping_address_collection: Optional[StripeObject] - shipping_cost: Optional[StripeObject] - shipping_details: Optional[StripeObject] - shipping_options: List[StripeObject] + shipping_address_collection: Optional[ShippingAddressCollection] + shipping_cost: Optional[ShippingCost] + shipping_details: Optional[ShippingDetails] + shipping_options: List[ShippingOption] status: Optional[Literal["complete", "expired", "open"]] submit_type: Optional[Literal["auto", "book", "donate", "pay"]] subscription: Optional[ExpandableField["Subscription"]] success_url: Optional[str] - tax_id_collection: Optional[StripeObject] - total_details: Optional[StripeObject] - ui_mode: Optional[Literal["embedded", "hosted"]] + tax_id_collection: Optional[TaxIdCollection] + total_details: Optional[TotalDetails] url: Optional[str] @classmethod @@ -261,3 +1060,24 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "after_expiration": AfterExpiration, + "automatic_tax": AutomaticTax, + "consent": Consent, + "consent_collection": ConsentCollection, + "currency_conversion": CurrencyConversion, + "custom_fields": CustomField, + "custom_text": CustomText, + "customer_details": CustomerDetails, + "invoice_creation": InvoiceCreation, + "payment_method_configuration_details": PaymentMethodConfigurationDetails, + "payment_method_options": PaymentMethodOptions, + "phone_number_collection": PhoneNumberCollection, + "shipping_address_collection": ShippingAddressCollection, + "shipping_cost": ShippingCost, + "shipping_details": ShippingDetails, + "shipping_options": ShippingOption, + "tax_id_collection": TaxIdCollection, + "total_details": TotalDetails, + } diff --git a/stripe/api_resources/confirmation_token.py b/stripe/api_resources/confirmation_token.py index 8933cebd7..93021f2bc 100644 --- a/stripe/api_resources/confirmation_token.py +++ b/stripe/api_resources/confirmation_token.py @@ -1,17 +1,17 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import APIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject -from typing import Any, Optional +from typing import Any, List, Optional from typing_extensions import Literal from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.charge import Charge from stripe.api_resources.payment_method import PaymentMethod + from stripe.api_resources.setup_attempt import SetupAttempt class ConfirmationToken(APIResource["ConfirmationToken"]): @@ -22,19 +22,644 @@ class ConfirmationToken(APIResource["ConfirmationToken"]): """ OBJECT_NAME = "confirmation_token" + + class MandateData(StripeObject): + class CustomerAcceptance(StripeObject): + class Online(StripeObject): + ip_address: Optional[str] + user_agent: Optional[str] + + online: Optional[Online] + type: str + _inner_class_types = {"online": Online} + + customer_acceptance: CustomerAcceptance + _inner_class_types = {"customer_acceptance": CustomerAcceptance} + + class PaymentMethodPreview(StripeObject): + class AcssDebit(StripeObject): + bank_name: Optional[str] + fingerprint: Optional[str] + institution_number: Optional[str] + last4: Optional[str] + transit_number: Optional[str] + + class Affirm(StripeObject): + pass + + class AfterpayClearpay(StripeObject): + pass + + class Alipay(StripeObject): + pass + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + + class BacsDebit(StripeObject): + fingerprint: Optional[str] + last4: Optional[str] + sort_code: Optional[str] + + class Bancontact(StripeObject): + pass + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + email: Optional[str] + name: Optional[str] + phone: Optional[str] + _inner_class_types = {"address": Address} + + class Blik(StripeObject): + pass + + class Boleto(StripeObject): + tax_id: str + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[str] + address_postal_code_check: Optional[str] + cvc_check: Optional[str] + + class Networks(StripeObject): + available: List[str] + preferred: Optional[str] + + class ThreeDSecureUsage(StripeObject): + supported: bool + + class Wallet(StripeObject): + class AmexExpressCheckout(StripeObject): + pass + + class ApplePay(StripeObject): + pass + + class GooglePay(StripeObject): + pass + + class Link(StripeObject): + pass + + class Masterpass(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class ShippingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + billing_address: Optional[BillingAddress] + email: Optional[str] + name: Optional[str] + shipping_address: Optional[ShippingAddress] + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + class SamsungPay(StripeObject): + pass + + class VisaCheckout(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class ShippingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + billing_address: Optional[BillingAddress] + email: Optional[str] + name: Optional[str] + shipping_address: Optional[ShippingAddress] + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + amex_express_checkout: Optional[AmexExpressCheckout] + apple_pay: Optional[ApplePay] + dynamic_last4: Optional[str] + google_pay: Optional[GooglePay] + link: Optional[Link] + masterpass: Optional[Masterpass] + samsung_pay: Optional[SamsungPay] + type: Literal[ + "amex_express_checkout", + "apple_pay", + "google_pay", + "link", + "masterpass", + "samsung_pay", + "visa_checkout", + ] + visa_checkout: Optional[VisaCheckout] + _inner_class_types = { + "amex_express_checkout": AmexExpressCheckout, + "apple_pay": ApplePay, + "google_pay": GooglePay, + "link": Link, + "masterpass": Masterpass, + "samsung_pay": SamsungPay, + "visa_checkout": VisaCheckout, + } + + brand: str + checks: Optional[Checks] + country: Optional[str] + description: Optional[str] + exp_month: int + exp_year: int + fingerprint: Optional[str] + funding: str + iin: Optional[str] + issuer: Optional[str] + last4: str + networks: Optional[Networks] + three_d_secure_usage: Optional[ThreeDSecureUsage] + wallet: Optional[Wallet] + _inner_class_types = { + "checks": Checks, + "networks": Networks, + "three_d_secure_usage": ThreeDSecureUsage, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Networks(StripeObject): + available: List[str] + preferred: Optional[str] + + brand: Optional[str] + cardholder_name: Optional[str] + country: Optional[str] + description: Optional[str] + exp_month: int + exp_year: int + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + networks: Optional[Networks] + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + _inner_class_types = {"networks": Networks} + + class Cashapp(StripeObject): + buyer_id: Optional[str] + cashtag: Optional[str] + + class CustomerBalance(StripeObject): + pass + + class Eps(StripeObject): + bank: Optional[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + + class Fpx(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + + class Giropay(StripeObject): + pass + + class Grabpay(StripeObject): + pass + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + + class InteracPresent(StripeObject): + class Networks(StripeObject): + available: List[str] + preferred: Optional[str] + + brand: Optional[str] + cardholder_name: Optional[str] + country: Optional[str] + description: Optional[str] + exp_month: int + exp_year: int + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + networks: Optional[Networks] + preferred_locales: Optional[List[str]] + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + _inner_class_types = {"networks": Networks} + + class Klarna(StripeObject): + class Dob(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + dob: Optional[Dob] + _inner_class_types = {"dob": Dob} + + class Konbini(StripeObject): + pass + + class Link(StripeObject): + email: Optional[str] + persistent_token: Optional[str] + + class Oxxo(StripeObject): + pass + + class P24(StripeObject): + bank: Optional[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "volkswagen_bank", + ] + ] + + class Paynow(StripeObject): + pass + + class Paypal(StripeObject): + fingerprint: Optional[str] + payer_email: Optional[str] + payer_id: Optional[str] + verified_email: Optional[str] + + class Pix(StripeObject): + pass + + class Promptpay(StripeObject): + pass + + class SepaDebit(StripeObject): + class GeneratedFrom(StripeObject): + charge: Optional[ExpandableField["Charge"]] + setup_attempt: Optional[ExpandableField["SetupAttempt"]] + + bank_code: Optional[str] + branch_code: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + generated_from: Optional[GeneratedFrom] + last4: Optional[str] + _inner_class_types = {"generated_from": GeneratedFrom} + + class Sofort(StripeObject): + country: Optional[str] + + class UsBankAccount(StripeObject): + class Networks(StripeObject): + preferred: Optional[str] + supported: List[Literal["ach", "us_domestic_wire"]] + + class StatusDetails(StripeObject): + class Blocked(StripeObject): + network_code: Optional[ + Literal[ + "R02", + "R03", + "R04", + "R05", + "R07", + "R08", + "R10", + "R11", + "R16", + "R20", + "R29", + "R31", + ] + ] + reason: Optional[ + Literal[ + "bank_account_closed", + "bank_account_frozen", + "bank_account_invalid_details", + "bank_account_restricted", + "bank_account_unusable", + "debit_not_authorized", + ] + ] + + blocked: Optional[Blocked] + _inner_class_types = {"blocked": Blocked} + + account_holder_type: Optional[Literal["company", "individual"]] + account_number: Optional[str] + account_type: Optional[Literal["checking", "savings"]] + bank_name: Optional[str] + financial_connections_account: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + networks: Optional[Networks] + routing_number: Optional[str] + status_details: Optional[StatusDetails] + _inner_class_types = { + "networks": Networks, + "status_details": StatusDetails, + } + + class WechatPay(StripeObject): + pass + + class Zip(StripeObject): + pass + + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billing_details: BillingDetails + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + link: Optional[Link] + oxxo: Optional[Oxxo] + p24: Optional[P24] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + type: Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "blik", + "boleto", + "card", + "card_present", + "cashapp", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "interac_present", + "klarna", + "konbini", + "link", + "oxxo", + "p24", + "paynow", + "paypal", + "pix", + "promptpay", + "sepa_debit", + "sofort", + "us_bank_account", + "wechat_pay", + "zip", + ] + us_bank_account: Optional[UsBankAccount] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billing_details": BillingDetails, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "klarna": Klarna, + "konbini": Konbini, + "link": Link, + "oxxo": Oxxo, + "p24": P24, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "us_bank_account": UsBankAccount, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address + name: str + phone: Optional[str] + _inner_class_types = {"address": Address} + created: int expires_at: Optional[int] id: str livemode: bool - mandate_data: Optional[StripeObject] + mandate_data: Optional[MandateData] object: Literal["confirmation_token"] payment_intent: Optional[str] payment_method: Optional[ExpandableField["PaymentMethod"]] - payment_method_preview: Optional[StripeObject] + payment_method_preview: Optional[PaymentMethodPreview] return_url: Optional[str] setup_future_usage: Optional[Literal["off_session", "on_session"]] setup_intent: Optional[str] - shipping: Optional[StripeObject] + shipping: Optional[Shipping] @classmethod def retrieve( @@ -43,3 +668,9 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "mandate_data": MandateData, + "payment_method_preview": PaymentMethodPreview, + "shipping": Shipping, + } diff --git a/stripe/api_resources/country_spec.py b/stripe/api_resources/country_spec.py index cfd3d03f0..a0ae4a6e0 100644 --- a/stripe/api_resources/country_spec.py +++ b/stripe/api_resources/country_spec.py @@ -18,6 +18,20 @@ class CountrySpec(ListableAPIResource["CountrySpec"]): """ OBJECT_NAME = "country_spec" + + class VerificationFields(StripeObject): + class Company(StripeObject): + additional: List[str] + minimum: List[str] + + class Individual(StripeObject): + additional: List[str] + minimum: List[str] + + company: Company + individual: Individual + _inner_class_types = {"company": Company, "individual": Individual} + default_currency: str id: str object: Literal["country_spec"] @@ -25,7 +39,7 @@ class CountrySpec(ListableAPIResource["CountrySpec"]): supported_payment_currencies: List[str] supported_payment_methods: List[str] supported_transfer_countries: List[str] - verification_fields: StripeObject + verification_fields: VerificationFields @classmethod def list( @@ -59,3 +73,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"verification_fields": VerificationFields} diff --git a/stripe/api_resources/coupon.py b/stripe/api_resources/coupon.py index 4ea2516cf..6161b1f15 100644 --- a/stripe/api_resources/coupon.py +++ b/stripe/api_resources/coupon.py @@ -9,7 +9,7 @@ ) from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus @@ -27,11 +27,18 @@ class Coupon( """ OBJECT_NAME = "coupon" + + class AppliesTo(StripeObject): + products: List[str] + + class CurrencyOptions(StripeObject): + amount_off: int + amount_off: Optional[int] - applies_to: Optional[StripeObject] + applies_to: Optional[AppliesTo] created: int currency: Optional[str] - currency_options: Optional[Dict[str, StripeObject]] + currency_options: Optional[Dict[str, CurrencyOptions]] duration: Literal["forever", "once", "repeating", "variable"] duration_in_months: Optional[int] id: str @@ -124,3 +131,8 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "applies_to": AppliesTo, + "currency_options": CurrencyOptions, + } diff --git a/stripe/api_resources/credit_note.py b/stripe/api_resources/credit_note.py index 8bae8d452..4fbe25a9f 100644 --- a/stripe/api_resources/credit_note.py +++ b/stripe/api_resources/credit_note.py @@ -22,8 +22,11 @@ from stripe.api_resources.customer_balance_transaction import ( CustomerBalanceTransaction, ) + from stripe.api_resources.discount import Discount from stripe.api_resources.invoice import Invoice from stripe.api_resources.refund import Refund + from stripe.api_resources.shipping_rate import ShippingRate + from stripe.api_resources.tax_rate import TaxRate @nested_resource_class_methods("line") @@ -39,6 +42,68 @@ class CreditNote( """ OBJECT_NAME = "credit_note" + + class DiscountAmount(StripeObject): + amount: int + discount: ExpandableField["Discount"] + + class ShippingCost(StripeObject): + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + amount_subtotal: int + amount_tax: int + amount_total: int + shipping_rate: Optional[ExpandableField["ShippingRate"]] + taxes: Optional[List[Tax]] + _inner_class_types = {"taxes": Tax} + + class TaxAmount(StripeObject): + amount: int + inclusive: bool + tax_rate: ExpandableField["TaxRate"] + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + amount: int amount_shipping: int created: int @@ -48,7 +113,7 @@ class CreditNote( ExpandableField["CustomerBalanceTransaction"] ] discount_amount: int - discount_amounts: List[StripeObject] + discount_amounts: List[DiscountAmount] effective_at: Optional[int] id: str invoice: ExpandableField["Invoice"] @@ -66,11 +131,11 @@ class CreditNote( ] ] refund: Optional[ExpandableField["Refund"]] - shipping_cost: Optional[StripeObject] + shipping_cost: Optional[ShippingCost] status: Literal["issued", "void"] subtotal: int subtotal_excluding_tax: Optional[int] - tax_amounts: List[StripeObject] + tax_amounts: List[TaxAmount] total: int total_excluding_tax: Optional[int] type: Literal["post_payment", "pre_payment"] @@ -223,3 +288,9 @@ def list_lines( stripe_account=stripe_account, params=params, ) + + _inner_class_types = { + "discount_amounts": DiscountAmount, + "shipping_cost": ShippingCost, + "tax_amounts": TaxAmount, + } diff --git a/stripe/api_resources/credit_note_line_item.py b/stripe/api_resources/credit_note_line_item.py index f7d1abca6..990eec85f 100644 --- a/stripe/api_resources/credit_note_line_item.py +++ b/stripe/api_resources/credit_note_line_item.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec from stripe.api_resources.abstract import ListableAPIResource +from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject from typing import Any, List, Optional @@ -9,6 +10,7 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.discount import Discount from stripe.api_resources.tax_rate import TaxRate @@ -18,17 +20,47 @@ class CreditNoteLineItem(ListableAPIResource["CreditNoteLineItem"]): """ OBJECT_NAME = "credit_note_line_item" + + class DiscountAmount(StripeObject): + amount: int + discount: ExpandableField["Discount"] + + class TaxAmount(StripeObject): + amount: int + inclusive: bool + tax_rate: ExpandableField["TaxRate"] + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + amount: int amount_excluding_tax: Optional[int] description: Optional[str] discount_amount: int - discount_amounts: List[StripeObject] + discount_amounts: List[DiscountAmount] id: str invoice_line_item: Optional[str] livemode: bool object: Literal["credit_note_line_item"] quantity: Optional[int] - tax_amounts: List[StripeObject] + tax_amounts: List[TaxAmount] tax_rates: List["TaxRate"] type: Literal["custom_line_item", "invoice_line_item"] unit_amount: Optional[int] @@ -59,3 +91,8 @@ def list( ) return result + + _inner_class_types = { + "discount_amounts": DiscountAmount, + "tax_amounts": TaxAmount, + } diff --git a/stripe/api_resources/customer.py b/stripe/api_resources/customer.py index da4e9e1b2..677a93cde 100644 --- a/stripe/api_resources/customer.py +++ b/stripe/api_resources/customer.py @@ -23,6 +23,7 @@ if TYPE_CHECKING: from stripe.api_resources.cash_balance import CashBalance from stripe.api_resources.discount import Discount + from stripe.api_resources.payment_method import PaymentMethod from stripe.api_resources.subscription import Subscription from stripe.api_resources.tax_id import TaxId from stripe.api_resources.test_helpers.test_clock import TestClock @@ -46,7 +47,67 @@ class Customer( """ OBJECT_NAME = "customer" - address: Optional[StripeObject] + + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class InvoiceSettings(StripeObject): + class CustomField(StripeObject): + name: str + value: str + + class RenderingOptions(StripeObject): + amount_tax_display: Optional[str] + + custom_fields: Optional[List[CustomField]] + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + footer: Optional[str] + rendering_options: Optional[RenderingOptions] + _inner_class_types = { + "custom_fields": CustomField, + "rendering_options": RenderingOptions, + } + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + class Tax(StripeObject): + class Location(StripeObject): + country: str + source: Literal[ + "billing_address", + "ip_address", + "payment_method", + "shipping_destination", + ] + state: Optional[str] + + automatic_tax: Literal[ + "failed", "not_collecting", "supported", "unrecognized_location" + ] + ip_address: Optional[str] + location: Optional[Location] + _inner_class_types = {"location": Location} + + address: Optional[Address] balance: Optional[int] cash_balance: Optional["CashBalance"] created: int @@ -59,7 +120,7 @@ class Customer( id: str invoice_credit_balance: Optional[Dict[str, int]] invoice_prefix: Optional[str] - invoice_settings: Optional[StripeObject] + invoice_settings: Optional[InvoiceSettings] livemode: bool metadata: Optional[Dict[str, str]] name: Optional[str] @@ -67,10 +128,10 @@ class Customer( object: Literal["customer"] phone: Optional[str] preferred_locales: Optional[List[str]] - shipping: Optional[StripeObject] + shipping: Optional[Shipping] sources: Optional[ListObject[Any]] subscriptions: Optional[ListObject["Subscription"]] - tax: Optional[StripeObject] + tax: Optional[Tax] tax_exempt: Optional[Literal["exempt", "none", "reverse"]] tax_ids: Optional[ListObject["TaxId"]] test_clock: Optional[ExpandableField["TestClock"]] @@ -692,5 +753,12 @@ def fund_cash_balance( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "address": Address, + "invoice_settings": InvoiceSettings, + "shipping": Shipping, + "tax": Tax, + } + Customer.TestHelpers._resource_cls = Customer diff --git a/stripe/api_resources/customer_cash_balance_transaction.py b/stripe/api_resources/customer_cash_balance_transaction.py index 4b1ca71fb..98833df5d 100644 --- a/stripe/api_resources/customer_cash_balance_transaction.py +++ b/stripe/api_resources/customer_cash_balance_transaction.py @@ -10,7 +10,10 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.balance_transaction import BalanceTransaction from stripe.api_resources.customer import Customer + from stripe.api_resources.payment_intent import PaymentIntent + from stripe.api_resources.refund import Refund class CustomerCashBalanceTransaction( @@ -24,18 +27,75 @@ class CustomerCashBalanceTransaction( """ OBJECT_NAME = "customer_cash_balance_transaction" - adjusted_for_overdraft: Optional[StripeObject] - applied_to_payment: Optional[StripeObject] + + class AdjustedForOverdraft(StripeObject): + balance_transaction: ExpandableField["BalanceTransaction"] + linked_transaction: ExpandableField["CustomerCashBalanceTransaction"] + + class AppliedToPayment(StripeObject): + payment_intent: ExpandableField["PaymentIntent"] + + class Funded(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + bic: Optional[str] + iban_last4: Optional[str] + sender_name: Optional[str] + + class GbBankTransfer(StripeObject): + account_number_last4: Optional[str] + sender_name: Optional[str] + sort_code: Optional[str] + + class JpBankTransfer(StripeObject): + sender_bank: Optional[str] + sender_branch: Optional[str] + sender_name: Optional[str] + + class UsBankTransfer(StripeObject): + network: Optional[Literal["ach", "domestic_wire_us", "swift"]] + sender_name: Optional[str] + + eu_bank_transfer: Optional[EuBankTransfer] + gb_bank_transfer: Optional[GbBankTransfer] + jp_bank_transfer: Optional[JpBankTransfer] + reference: Optional[str] + type: Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + us_bank_transfer: Optional[UsBankTransfer] + _inner_class_types = { + "eu_bank_transfer": EuBankTransfer, + "gb_bank_transfer": GbBankTransfer, + "jp_bank_transfer": JpBankTransfer, + "us_bank_transfer": UsBankTransfer, + } + + bank_transfer: BankTransfer + _inner_class_types = {"bank_transfer": BankTransfer} + + class RefundedFromPayment(StripeObject): + refund: ExpandableField["Refund"] + + class UnappliedFromPayment(StripeObject): + payment_intent: ExpandableField["PaymentIntent"] + + adjusted_for_overdraft: Optional[AdjustedForOverdraft] + applied_to_payment: Optional[AppliedToPayment] created: int currency: str customer: ExpandableField["Customer"] ending_balance: int - funded: Optional[StripeObject] + funded: Optional[Funded] id: str livemode: bool net_amount: int object: Literal["customer_cash_balance_transaction"] - refunded_from_payment: Optional[StripeObject] + refunded_from_payment: Optional[RefundedFromPayment] type: Literal[ "adjusted_for_overdraft", "applied_to_payment", @@ -46,7 +106,7 @@ class CustomerCashBalanceTransaction( "return_initiated", "unapplied_from_payment", ] - unapplied_from_payment: Optional[StripeObject] + unapplied_from_payment: Optional[UnappliedFromPayment] @classmethod def list( @@ -80,3 +140,11 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "adjusted_for_overdraft": AdjustedForOverdraft, + "applied_to_payment": AppliedToPayment, + "funded": Funded, + "refunded_from_payment": RefundedFromPayment, + "unapplied_from_payment": UnappliedFromPayment, + } diff --git a/stripe/api_resources/customer_session.py b/stripe/api_resources/customer_session.py index a24b434d7..b796d8ed0 100644 --- a/stripe/api_resources/customer_session.py +++ b/stripe/api_resources/customer_session.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.expandable_field import ExpandableField from typing import Any, Optional, cast diff --git a/stripe/api_resources/dispute.py b/stripe/api_resources/dispute.py index 3cee58616..f03d846f5 100644 --- a/stripe/api_resources/dispute.py +++ b/stripe/api_resources/dispute.py @@ -17,6 +17,7 @@ if TYPE_CHECKING: from stripe.api_resources.balance_transaction import BalanceTransaction from stripe.api_resources.charge import Charge + from stripe.api_resources.file import File from stripe.api_resources.payment_intent import PaymentIntent @@ -32,13 +33,58 @@ class Dispute( """ OBJECT_NAME = "dispute" + + class Evidence(StripeObject): + access_activity_log: Optional[str] + billing_address: Optional[str] + cancellation_policy: Optional[ExpandableField["File"]] + cancellation_policy_disclosure: Optional[str] + cancellation_rebuttal: Optional[str] + customer_communication: Optional[ExpandableField["File"]] + customer_email_address: Optional[str] + customer_name: Optional[str] + customer_purchase_ip: Optional[str] + customer_signature: Optional[ExpandableField["File"]] + duplicate_charge_documentation: Optional[ExpandableField["File"]] + duplicate_charge_explanation: Optional[str] + duplicate_charge_id: Optional[str] + product_description: Optional[str] + receipt: Optional[ExpandableField["File"]] + refund_policy: Optional[ExpandableField["File"]] + refund_policy_disclosure: Optional[str] + refund_refusal_explanation: Optional[str] + service_date: Optional[str] + service_documentation: Optional[ExpandableField["File"]] + shipping_address: Optional[str] + shipping_carrier: Optional[str] + shipping_date: Optional[str] + shipping_documentation: Optional[ExpandableField["File"]] + shipping_tracking_number: Optional[str] + uncategorized_file: Optional[ExpandableField["File"]] + uncategorized_text: Optional[str] + + class EvidenceDetails(StripeObject): + due_by: Optional[int] + has_evidence: bool + past_due: bool + submission_count: int + + class PaymentMethodDetails(StripeObject): + class Card(StripeObject): + brand: str + network_reason_code: Optional[str] + + card: Optional[Card] + type: Literal["card"] + _inner_class_types = {"card": Card} + amount: int balance_transactions: List["BalanceTransaction"] charge: ExpandableField["Charge"] created: int currency: str - evidence: StripeObject - evidence_details: StripeObject + evidence: Evidence + evidence_details: EvidenceDetails id: str is_charge_refundable: bool livemode: bool @@ -46,7 +92,7 @@ class Dispute( network_reason_code: Optional[str] object: Literal["dispute"] payment_intent: Optional[ExpandableField["PaymentIntent"]] - payment_method_details: Optional[StripeObject] + payment_method_details: Optional[PaymentMethodDetails] reason: str status: Literal[ "lost", @@ -129,3 +175,9 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "evidence": Evidence, + "evidence_details": EvidenceDetails, + "payment_method_details": PaymentMethodDetails, + } diff --git a/stripe/api_resources/event.py b/stripe/api_resources/event.py index d1aece249..7e2aef770 100644 --- a/stripe/api_resources/event.py +++ b/stripe/api_resources/event.py @@ -3,7 +3,7 @@ from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Optional +from typing import Any, Dict, Optional from typing_extensions import Literal @@ -42,16 +42,51 @@ class Event(ListableAPIResource["Event"]): """ OBJECT_NAME = "event" + + class Data(StripeObject): + object: Dict[str, Any] + previous_attributes: Optional[Dict[str, Any]] + + class Reason(StripeObject): + class AutomationAction(StripeObject): + class StripeSendWebhookCustomEvent(StripeObject): + custom_data: Optional[Dict[str, str]] + + stripe_send_webhook_custom_event: Optional[ + StripeSendWebhookCustomEvent + ] + trigger: str + type: Literal["stripe_send_webhook_custom_event"] + _inner_class_types = { + "stripe_send_webhook_custom_event": StripeSendWebhookCustomEvent, + } + + class Request(StripeObject): + id: Optional[str] + idempotency_key: Optional[str] + + automation_action: Optional[AutomationAction] + request: Optional[Request] + type: Literal["automation_action", "request"] + _inner_class_types = { + "automation_action": AutomationAction, + "request": Request, + } + + class Request(StripeObject): + id: Optional[str] + idempotency_key: Optional[str] + account: Optional[str] api_version: Optional[str] created: int - data: StripeObject + data: Data id: str livemode: bool object: Literal["event"] pending_webhooks: int - reason: Optional[StripeObject] - request: Optional[StripeObject] + reason: Optional[Reason] + request: Optional[Request] type: Literal[ "account.application.authorized", "account.application.deauthorized", @@ -337,3 +372,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"data": Data, "reason": Reason, "request": Request} diff --git a/stripe/api_resources/financial_connections/account.py b/stripe/api_resources/financial_connections/account.py index f1e3d2b5e..b6a3f3348 100644 --- a/stripe/api_resources/financial_connections/account.py +++ b/stripe/api_resources/financial_connections/account.py @@ -8,12 +8,14 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, List, Optional +from typing import Any, Dict, List, Optional from typing_extensions import Literal from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.account import Account as AccountResource + from stripe.api_resources.customer import Customer from stripe.api_resources.financial_connections.account_ownership import ( AccountOwnership, ) @@ -26,20 +28,61 @@ class Account(ListableAPIResource["Account"]): """ OBJECT_NAME = "financial_connections.account" - account_holder: Optional[StripeObject] - balance: Optional[StripeObject] - balance_refresh: Optional[StripeObject] + + class AccountHolder(StripeObject): + account: Optional[ExpandableField["AccountResource"]] + customer: Optional[ExpandableField["Customer"]] + type: Literal["account", "customer"] + + class Balance(StripeObject): + class Cash(StripeObject): + available: Optional[Dict[str, int]] + + class Credit(StripeObject): + used: Optional[Dict[str, int]] + + as_of: int + cash: Optional[Cash] + credit: Optional[Credit] + current: Dict[str, int] + type: Literal["cash", "credit"] + _inner_class_types = {"cash": Cash, "credit": Credit} + + class BalanceRefresh(StripeObject): + last_attempted_at: int + next_refresh_available_at: Optional[int] + status: Literal["failed", "pending", "succeeded"] + + class InferredBalancesRefresh(StripeObject): + last_attempted_at: int + next_refresh_available_at: Optional[int] + status: Literal["failed", "pending", "succeeded"] + + class OwnershipRefresh(StripeObject): + last_attempted_at: int + next_refresh_available_at: Optional[int] + status: Literal["failed", "pending", "succeeded"] + + class TransactionRefresh(StripeObject): + id: str + last_attempted_at: int + next_refresh_available_at: Optional[int] + status: Literal["failed", "pending", "succeeded"] + + account_holder: Optional[AccountHolder] + balance: Optional[Balance] + balance_refresh: Optional[BalanceRefresh] category: Literal["cash", "credit", "investment", "other"] created: int display_name: Optional[str] id: str - inferred_balances_refresh: Optional[StripeObject] + inferred_balances_refresh: Optional[InferredBalancesRefresh] institution_name: str last4: Optional[str] livemode: bool object: Literal["financial_connections.account"] ownership: Optional[ExpandableField["AccountOwnership"]] - ownership_refresh: Optional[StripeObject] + ownership_refresh: Optional[OwnershipRefresh] permissions: Optional[ List[ Literal["balances", "ownership", "payment_method", "transactions"] @@ -56,7 +99,7 @@ class Account(ListableAPIResource["Account"]): ] subscriptions: Optional[List[Literal["inferred_balances", "transactions"]]] supported_payment_method_types: List[Literal["link", "us_bank_account"]] - transaction_refresh: Optional[StripeObject] + transaction_refresh: Optional[TransactionRefresh] @classmethod def _cls_disconnect( @@ -271,3 +314,12 @@ def list_inferred_balances( stripe_account=stripe_account, params=params, ) + + _inner_class_types = { + "account_holder": AccountHolder, + "balance": Balance, + "balance_refresh": BalanceRefresh, + "inferred_balances_refresh": InferredBalancesRefresh, + "ownership_refresh": OwnershipRefresh, + "transaction_refresh": TransactionRefresh, + } diff --git a/stripe/api_resources/financial_connections/account_inferred_balance.py b/stripe/api_resources/financial_connections/account_inferred_balance.py index 7d58f186e..348e174fb 100644 --- a/stripe/api_resources/financial_connections/account_inferred_balance.py +++ b/stripe/api_resources/financial_connections/account_inferred_balance.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from typing import Any, Dict, Optional diff --git a/stripe/api_resources/financial_connections/session.py b/stripe/api_resources/financial_connections/session.py index 586341fd8..504cd8403 100644 --- a/stripe/api_resources/financial_connections/session.py +++ b/stripe/api_resources/financial_connections/session.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec from stripe.api_resources.abstract import CreateableAPIResource +from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject from typing import Any, List, Optional, cast @@ -9,7 +10,11 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: - from stripe.api_resources.financial_connections.account import Account + from stripe.api_resources.account import Account as AccountResource + from stripe.api_resources.customer import Customer + from stripe.api_resources.financial_connections.account import ( + Account as FinancialConnectionsAccountResource, + ) class Session(CreateableAPIResource["Session"]): @@ -18,14 +23,36 @@ class Session(CreateableAPIResource["Session"]): """ OBJECT_NAME = "financial_connections.session" - account_holder: Optional[StripeObject] - accounts: ListObject["Account"] + + class AccountHolder(StripeObject): + account: Optional[ExpandableField["AccountResource"]] + customer: Optional[ExpandableField["Customer"]] + type: Literal["account", "customer"] + + class Filters(StripeObject): + countries: Optional[List[str]] + + class Limits(StripeObject): + accounts: int + + class ManualEntry(StripeObject): + pass + + class StatusDetails(StripeObject): + class Cancelled(StripeObject): + reason: Literal["custom_manual_entry", "other"] + + cancelled: Optional[Cancelled] + _inner_class_types = {"cancelled": Cancelled} + + account_holder: Optional[AccountHolder] + accounts: ListObject["FinancialConnectionsAccountResource"] client_secret: str - filters: Optional[StripeObject] + filters: Optional[Filters] id: str - limits: Optional[StripeObject] + limits: Optional[Limits] livemode: bool - manual_entry: Optional[StripeObject] + manual_entry: Optional[ManualEntry] object: Literal["financial_connections.session"] permissions: List[ Literal["balances", "ownership", "payment_method", "transactions"] @@ -39,7 +66,7 @@ class Session(CreateableAPIResource["Session"]): ] return_url: Optional[str] status: Optional[Literal["cancelled", "failed", "pending", "succeeded"]] - status_details: Optional[StripeObject] + status_details: Optional[StatusDetails] @classmethod def create( @@ -70,3 +97,11 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "account_holder": AccountHolder, + "filters": Filters, + "limits": Limits, + "manual_entry": ManualEntry, + "status_details": StatusDetails, + } diff --git a/stripe/api_resources/financial_connections/transaction.py b/stripe/api_resources/financial_connections/transaction.py index a94a8977d..8647df03d 100644 --- a/stripe/api_resources/financial_connections/transaction.py +++ b/stripe/api_resources/financial_connections/transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject @@ -15,6 +13,11 @@ class Transaction(ListableAPIResource["Transaction"]): """ OBJECT_NAME = "financial_connections.transaction" + + class StatusTransitions(StripeObject): + posted_at: Optional[int] + void_at: Optional[int] + account: str amount: int currency: str @@ -23,7 +26,7 @@ class Transaction(ListableAPIResource["Transaction"]): livemode: bool object: Literal["financial_connections.transaction"] status: Literal["pending", "posted", "void"] - status_transitions: StripeObject + status_transitions: StatusTransitions transacted_at: int transaction_refresh: str updated: int @@ -52,3 +55,5 @@ def list( ) return result + + _inner_class_types = {"status_transitions": StatusTransitions} diff --git a/stripe/api_resources/funding_instructions.py b/stripe/api_resources/funding_instructions.py index 2d72e2e30..a88d0d983 100644 --- a/stripe/api_resources/funding_instructions.py +++ b/stripe/api_resources/funding_instructions.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec from stripe.stripe_object import StripeObject +from typing import List, Optional from typing_extensions import Literal @@ -14,8 +15,58 @@ class FundingInstructions(StripeObject): """ OBJECT_NAME = "funding_instructions" - bank_transfer: StripeObject + + class BankTransfer(StripeObject): + class FinancialAddress(StripeObject): + class Iban(StripeObject): + account_holder_name: str + bic: str + country: str + iban: str + + class SortCode(StripeObject): + account_holder_name: str + account_number: str + sort_code: str + + class Spei(StripeObject): + bank_code: str + bank_name: str + clabe: str + + class Zengin(StripeObject): + account_holder_name: Optional[str] + account_number: Optional[str] + account_type: Optional[str] + bank_code: Optional[str] + bank_name: Optional[str] + branch_code: Optional[str] + branch_name: Optional[str] + + iban: Optional[Iban] + sort_code: Optional[SortCode] + spei: Optional[Spei] + supported_networks: Optional[ + List[Literal["bacs", "fps", "sepa", "spei", "zengin"]] + ] + type: Literal["iban", "sort_code", "spei", "zengin"] + zengin: Optional[Zengin] + _inner_class_types = { + "iban": Iban, + "sort_code": SortCode, + "spei": Spei, + "zengin": Zengin, + } + + country: str + financial_addresses: List[FinancialAddress] + type: Literal["eu_bank_transfer", "jp_bank_transfer"] + _inner_class_types = {"financial_addresses": FinancialAddress} + + bank_transfer: BankTransfer currency: str funding_type: Literal["bank_transfer"] livemode: bool object: Literal["funding_instructions"] + + _inner_class_types = {"bank_transfer": BankTransfer} diff --git a/stripe/api_resources/gift_cards/__init__.py b/stripe/api_resources/gift_cards/__init__.py index 510814c13..014d48ffe 100644 --- a/stripe/api_resources/gift_cards/__init__.py +++ b/stripe/api_resources/gift_cards/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - # flake8: noqa from stripe.api_resources.gift_cards.card import Card diff --git a/stripe/api_resources/gift_cards/card.py b/stripe/api_resources/gift_cards/card.py index 3c6f87347..4e046b703 100644 --- a/stripe/api_resources/gift_cards/card.py +++ b/stripe/api_resources/gift_cards/card.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, @@ -30,12 +28,35 @@ class Card( """ OBJECT_NAME = "gift_cards.card" + + class CreatedBy(StripeObject): + class Checkout(StripeObject): + checkout_session: str + line_item: Optional[str] + + class Order(StripeObject): + line_item: Optional[str] + order: str + + class Payment(StripeObject): + payment_intent: str + + checkout: Optional[Checkout] + order: Optional[Order] + payment: Optional[Payment] + type: Literal["checkout", "order", "payment"] + _inner_class_types = { + "checkout": Checkout, + "order": Order, + "payment": Payment, + } + active: bool amount_available: int amount_held: int code: Optional[str] created: int - created_by: Optional[StripeObject] + created_by: Optional[CreatedBy] currency: str id: str metadata: Optional[Dict[str, str]] @@ -121,3 +142,5 @@ def validate( stripe_account=stripe_account, params=params, ) + + _inner_class_types = {"created_by": CreatedBy} diff --git a/stripe/api_resources/gift_cards/transaction.py b/stripe/api_resources/gift_cards/transaction.py index 0da381d0d..c6a49a4e9 100644 --- a/stripe/api_resources/gift_cards/transaction.py +++ b/stripe/api_resources/gift_cards/transaction.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, @@ -30,10 +28,33 @@ class Transaction( """ OBJECT_NAME = "gift_cards.transaction" + + class CreatedBy(StripeObject): + class Checkout(StripeObject): + checkout_session: str + line_item: Optional[str] + + class Order(StripeObject): + line_item: Optional[str] + order: str + + class Payment(StripeObject): + payment_intent: str + + checkout: Optional[Checkout] + order: Optional[Order] + payment: Optional[Payment] + type: Literal["checkout", "order", "payment"] + _inner_class_types = { + "checkout": Checkout, + "order": Order, + "payment": Payment, + } + amount: Optional[int] confirmed_at: Optional[int] created: Optional[int] - created_by: Optional[StripeObject] + created_by: Optional[CreatedBy] currency: Optional[str] description: Optional[str] gift_card: Optional[str] @@ -167,3 +188,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"created_by": CreatedBy} diff --git a/stripe/api_resources/identity/verification_report.py b/stripe/api_resources/identity/verification_report.py index c913fedb3..7f54dbe95 100644 --- a/stripe/api_resources/identity/verification_report.py +++ b/stripe/api_resources/identity/verification_report.py @@ -3,7 +3,7 @@ from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Optional +from typing import Any, List, Optional from typing_extensions import Literal @@ -23,14 +23,128 @@ class VerificationReport(ListableAPIResource["VerificationReport"]): """ OBJECT_NAME = "identity.verification_report" + + class Document(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class Dob(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + class Error(StripeObject): + code: Optional[ + Literal[ + "document_expired", + "document_type_not_supported", + "document_unverified_other", + ] + ] + reason: Optional[str] + + class ExpirationDate(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + class IssuedDate(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + address: Optional[Address] + dob: Optional[Dob] + error: Optional[Error] + expiration_date: Optional[ExpirationDate] + files: Optional[List[str]] + first_name: Optional[str] + issued_date: Optional[IssuedDate] + issuing_country: Optional[str] + last_name: Optional[str] + number: Optional[str] + status: Literal["unverified", "verified"] + type: Optional[Literal["driving_license", "id_card", "passport"]] + _inner_class_types = { + "address": Address, + "dob": Dob, + "error": Error, + "expiration_date": ExpirationDate, + "issued_date": IssuedDate, + } + + class IdNumber(StripeObject): + class Dob(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + class Error(StripeObject): + code: Optional[ + Literal[ + "id_number_insufficient_document_data", + "id_number_mismatch", + "id_number_unverified_other", + ] + ] + reason: Optional[str] + + dob: Optional[Dob] + error: Optional[Error] + first_name: Optional[str] + id_number: Optional[str] + id_number_type: Optional[Literal["br_cpf", "sg_nric", "us_ssn"]] + last_name: Optional[str] + status: Literal["unverified", "verified"] + _inner_class_types = {"dob": Dob, "error": Error} + + class Options(StripeObject): + class Document(StripeObject): + allowed_types: Optional[ + List[Literal["driving_license", "id_card", "passport"]] + ] + require_id_number: Optional[bool] + require_live_capture: Optional[bool] + require_matching_selfie: Optional[bool] + + class IdNumber(StripeObject): + pass + + document: Optional[Document] + id_number: Optional[IdNumber] + _inner_class_types = {"document": Document, "id_number": IdNumber} + + class Selfie(StripeObject): + class Error(StripeObject): + code: Optional[ + Literal[ + "selfie_document_missing_photo", + "selfie_face_mismatch", + "selfie_manipulated", + "selfie_unverified_other", + ] + ] + reason: Optional[str] + + document: Optional[str] + error: Optional[Error] + selfie: Optional[str] + status: Literal["unverified", "verified"] + _inner_class_types = {"error": Error} + created: int - document: Optional[StripeObject] + document: Optional[Document] id: str - id_number: Optional[StripeObject] + id_number: Optional[IdNumber] livemode: bool object: Literal["identity.verification_report"] - options: Optional[StripeObject] - selfie: Optional[StripeObject] + options: Optional[Options] + selfie: Optional[Selfie] type: Optional[Literal["document", "id_number"]] verification_session: Optional[str] @@ -66,3 +180,10 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "document": Document, + "id_number": IdNumber, + "options": Options, + "selfie": Selfie, + } diff --git a/stripe/api_resources/identity/verification_session.py b/stripe/api_resources/identity/verification_session.py index 9f5e09aba..14d8ee0de 100644 --- a/stripe/api_resources/identity/verification_session.py +++ b/stripe/api_resources/identity/verification_session.py @@ -9,7 +9,7 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus @@ -41,20 +41,84 @@ class VerificationSession( """ OBJECT_NAME = "identity.verification_session" + + class LastError(StripeObject): + code: Optional[ + Literal[ + "abandoned", + "consent_declined", + "country_not_supported", + "device_not_supported", + "document_expired", + "document_type_not_supported", + "document_unverified_other", + "id_number_insufficient_document_data", + "id_number_mismatch", + "id_number_unverified_other", + "selfie_document_missing_photo", + "selfie_face_mismatch", + "selfie_manipulated", + "selfie_unverified_other", + "under_supported_age", + ] + ] + reason: Optional[str] + + class Options(StripeObject): + class Document(StripeObject): + allowed_types: Optional[ + List[Literal["driving_license", "id_card", "passport"]] + ] + require_id_number: Optional[bool] + require_live_capture: Optional[bool] + require_matching_selfie: Optional[bool] + + class IdNumber(StripeObject): + pass + + document: Optional[Document] + id_number: Optional[IdNumber] + _inner_class_types = {"document": Document, "id_number": IdNumber} + + class Redaction(StripeObject): + status: Literal["processing", "redacted"] + + class VerifiedOutputs(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class Dob(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + address: Optional[Address] + dob: Optional[Dob] + first_name: Optional[str] + id_number: Optional[str] + id_number_type: Optional[Literal["br_cpf", "sg_nric", "us_ssn"]] + last_name: Optional[str] + _inner_class_types = {"address": Address, "dob": Dob} + client_secret: Optional[str] created: int id: str - last_error: Optional[StripeObject] + last_error: Optional[LastError] last_verification_report: Optional[ExpandableField["VerificationReport"]] livemode: bool metadata: Dict[str, str] object: Literal["identity.verification_session"] - options: Optional[StripeObject] - redaction: Optional[StripeObject] + options: Optional[Options] + redaction: Optional[Redaction] status: Literal["canceled", "processing", "requires_input", "verified"] type: Optional[Literal["document", "id_number"]] url: Optional[str] - verified_outputs: Optional[StripeObject] + verified_outputs: Optional[VerifiedOutputs] @classmethod def _cls_cancel( @@ -180,3 +244,10 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "last_error": LastError, + "options": Options, + "redaction": Redaction, + "verified_outputs": VerifiedOutputs, + } diff --git a/stripe/api_resources/invoice.py b/stripe/api_resources/invoice.py index 06c7c6a4b..30f3e6b54 100644 --- a/stripe/api_resources/invoice.py +++ b/stripe/api_resources/invoice.py @@ -28,6 +28,8 @@ from stripe.api_resources.payment_intent import PaymentIntent from stripe.api_resources.payment_method import PaymentMethod from stripe.api_resources.quote import Quote + from stripe.api_resources.setup_intent import SetupIntent + from stripe.api_resources.shipping_rate import ShippingRate from stripe.api_resources.subscription import Subscription from stripe.api_resources.tax_id import TaxId from stripe.api_resources.tax_rate import TaxRate @@ -77,6 +79,546 @@ class Invoice( """ OBJECT_NAME = "invoice" + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + status: Optional[ + Literal["complete", "failed", "requires_location_inputs"] + ] + _inner_class_types = {"liability": Liability} + + class CustomField(StripeObject): + name: str + value: str + + class CustomerAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class CustomerShipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + class CustomerTaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "ar_cuit", + "au_abn", + "au_arn", + "bg_uic", + "bo_tin", + "br_cnpj", + "br_cpf", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "ch_vat", + "cl_tin", + "cn_tin", + "co_nit", + "cr_tin", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "hk_br", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kr_brn", + "li_uid", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "no_vat", + "nz_gst", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sv_nit", + "th_vat", + "tr_tin", + "tw_vat", + "ua_vat", + "unknown", + "us_ein", + "uy_ruc", + "ve_rif", + "vn_tin", + "za_vat", + ] + value: Optional[str] + + class FromInvoice(StripeObject): + action: str + invoice: ExpandableField["Invoice"] + + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + class LastFinalizationError(StripeObject): + charge: Optional[str] + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "debit_not_authorized", + "email_invalid", + "expired_card", + "gift_card_balance_insufficient", + "gift_card_code_exists", + "gift_card_inactive", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sensitive_data_access_expired", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + decline_code: Optional[str] + doc_url: Optional[str] + message: Optional[str] + param: Optional[str] + payment_intent: Optional["PaymentIntent"] + payment_method: Optional["PaymentMethod"] + payment_method_type: Optional[str] + request_log_url: Optional[str] + setup_intent: Optional["SetupIntent"] + source: Optional[Any] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + + class PaymentSettings(StripeObject): + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + transaction_type: Optional[Literal["business", "personal"]] + + mandate_options: Optional[MandateOptions] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Bancontact(StripeObject): + preferred_language: Literal["de", "en", "fr", "nl"] + + class Card(StripeObject): + class Installments(StripeObject): + enabled: Optional[bool] + + installments: Optional[Installments] + request_three_d_secure: Optional[Literal["any", "automatic"]] + _inner_class_types = {"installments": Installments} + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + + eu_bank_transfer: Optional[EuBankTransfer] + type: Optional[str] + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + _inner_class_types = {"bank_transfer": BankTransfer} + + class Konbini(StripeObject): + pass + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + prefetch: Optional[ + List[ + Literal[ + "balances", + "inferred_balances", + "ownership", + "transactions", + ] + ] + ] + + financial_connections: Optional[FinancialConnections] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = { + "financial_connections": FinancialConnections, + } + + acss_debit: Optional[AcssDebit] + bancontact: Optional[Bancontact] + card: Optional[Card] + customer_balance: Optional[CustomerBalance] + konbini: Optional[Konbini] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "bancontact": Bancontact, + "card": Card, + "customer_balance": CustomerBalance, + "konbini": Konbini, + "us_bank_account": UsBankAccount, + } + + default_mandate: Optional[str] + payment_method_options: Optional[PaymentMethodOptions] + payment_method_types: Optional[ + List[ + Literal[ + "ach_credit_transfer", + "ach_debit", + "acss_debit", + "au_becs_debit", + "bacs_debit", + "bancontact", + "boleto", + "card", + "cashapp", + "customer_balance", + "fpx", + "giropay", + "grabpay", + "ideal", + "konbini", + "link", + "paynow", + "paypal", + "promptpay", + "sepa_credit_transfer", + "sepa_debit", + "sofort", + "us_bank_account", + "wechat_pay", + ] + ] + ] + _inner_class_types = {"payment_method_options": PaymentMethodOptions} + + class Rendering(StripeObject): + class Pdf(StripeObject): + page_size: Optional[Literal["a4", "auto", "letter"]] + + amount_tax_display: Optional[str] + pdf: Optional[Pdf] + _inner_class_types = {"pdf": Pdf} + + class RenderingOptions(StripeObject): + amount_tax_display: Optional[str] + + class ShippingCost(StripeObject): + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + amount_subtotal: int + amount_tax: int + amount_total: int + shipping_rate: Optional[ExpandableField["ShippingRate"]] + taxes: Optional[List[Tax]] + _inner_class_types = {"taxes": Tax} + + class ShippingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + class StatusTransitions(StripeObject): + finalized_at: Optional[int] + marked_uncollectible_at: Optional[int] + paid_at: Optional[int] + voided_at: Optional[int] + + class SubscriptionDetails(StripeObject): + class PauseCollection(StripeObject): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + resumes_at: Optional[int] + + metadata: Optional[Dict[str, str]] + pause_collection: Optional[PauseCollection] + _inner_class_types = {"pause_collection": PauseCollection} + + class ThresholdReason(StripeObject): + class ItemReason(StripeObject): + line_item_ids: List[str] + usage_gte: int + + amount_gte: Optional[int] + item_reasons: List[ItemReason] + _inner_class_types = {"item_reasons": ItemReason} + + class TotalDiscountAmount(StripeObject): + amount: int + discount: ExpandableField["Discount"] + + class TotalTaxAmount(StripeObject): + amount: int + inclusive: bool + tax_rate: ExpandableField["TaxRate"] + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + class TransferData(StripeObject): + amount: Optional[int] + destination: ExpandableField["Account"] + account_country: Optional[str] account_name: Optional[str] account_tax_ids: Optional[List[ExpandableField["TaxId"]]] @@ -89,7 +631,7 @@ class Invoice( attempt_count: int attempted: bool auto_advance: Optional[bool] - automatic_tax: StripeObject + automatic_tax: AutomaticTax billing_reason: Optional[ Literal[ "automatic_pending_invoice_item_invoice", @@ -107,15 +649,15 @@ class Invoice( collection_method: Literal["charge_automatically", "send_invoice"] created: int currency: str - custom_fields: Optional[List[StripeObject]] + custom_fields: Optional[List[CustomField]] customer: Optional[ExpandableField["Customer"]] - customer_address: Optional[StripeObject] + customer_address: Optional[CustomerAddress] customer_email: Optional[str] customer_name: Optional[str] customer_phone: Optional[str] - customer_shipping: Optional[StripeObject] + customer_shipping: Optional[CustomerShipping] customer_tax_exempt: Optional[Literal["exempt", "none", "reverse"]] - customer_tax_ids: Optional[List[StripeObject]] + customer_tax_ids: Optional[List[CustomerTaxId]] default_payment_method: Optional[ExpandableField["PaymentMethod"]] default_source: Optional[ExpandableField[Any]] default_tax_rates: List["TaxRate"] @@ -126,12 +668,12 @@ class Invoice( effective_at: Optional[int] ending_balance: Optional[int] footer: Optional[str] - from_invoice: Optional[StripeObject] + from_invoice: Optional[FromInvoice] hosted_invoice_url: Optional[str] id: Optional[str] invoice_pdf: Optional[str] - issuer: Optional[StripeObject] - last_finalization_error: Optional[StripeObject] + issuer: Optional[Issuer] + last_finalization_error: Optional[LastFinalizationError] latest_revision: Optional[ExpandableField["Invoice"]] lines: ListObject["InvoiceLineItem"] livemode: bool @@ -143,34 +685,34 @@ class Invoice( paid: bool paid_out_of_band: bool payment_intent: Optional[ExpandableField["PaymentIntent"]] - payment_settings: StripeObject + payment_settings: PaymentSettings period_end: int period_start: int post_payment_credit_notes_amount: int pre_payment_credit_notes_amount: int quote: Optional[ExpandableField["Quote"]] receipt_number: Optional[str] - rendering: Optional[StripeObject] - rendering_options: Optional[StripeObject] - shipping_cost: Optional[StripeObject] - shipping_details: Optional[StripeObject] + rendering: Optional[Rendering] + rendering_options: Optional[RenderingOptions] + shipping_cost: Optional[ShippingCost] + shipping_details: Optional[ShippingDetails] starting_balance: int statement_descriptor: Optional[str] status: Optional[Literal["draft", "open", "paid", "uncollectible", "void"]] - status_transitions: StripeObject + status_transitions: StatusTransitions subscription: Optional[ExpandableField["Subscription"]] - subscription_details: Optional[StripeObject] + subscription_details: Optional[SubscriptionDetails] subscription_proration_date: Optional[int] subtotal: int subtotal_excluding_tax: Optional[int] tax: Optional[int] test_clock: Optional[ExpandableField["TestClock"]] - threshold_reason: Optional[StripeObject] + threshold_reason: Optional[ThresholdReason] total: int - total_discount_amounts: Optional[List[StripeObject]] + total_discount_amounts: Optional[List[TotalDiscountAmount]] total_excluding_tax: Optional[int] - total_tax_amounts: List[StripeObject] - transfer_data: Optional[StripeObject] + total_tax_amounts: List[TotalTaxAmount] + transfer_data: Optional[TransferData] webhooks_delivered_at: Optional[int] deleted: Optional[Literal[True]] @@ -457,3 +999,25 @@ def search(cls, *args, **kwargs) -> SearchResultObject["Invoice"]: @classmethod def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() + + _inner_class_types = { + "automatic_tax": AutomaticTax, + "custom_fields": CustomField, + "customer_address": CustomerAddress, + "customer_shipping": CustomerShipping, + "customer_tax_ids": CustomerTaxId, + "from_invoice": FromInvoice, + "issuer": Issuer, + "last_finalization_error": LastFinalizationError, + "payment_settings": PaymentSettings, + "rendering": Rendering, + "rendering_options": RenderingOptions, + "shipping_cost": ShippingCost, + "shipping_details": ShippingDetails, + "status_transitions": StatusTransitions, + "subscription_details": SubscriptionDetails, + "threshold_reason": ThresholdReason, + "total_discount_amounts": TotalDiscountAmount, + "total_tax_amounts": TotalTaxAmount, + "transfer_data": TransferData, + } diff --git a/stripe/api_resources/invoice_item.py b/stripe/api_resources/invoice_item.py index f31d32cdb..8fde57483 100644 --- a/stripe/api_resources/invoice_item.py +++ b/stripe/api_resources/invoice_item.py @@ -48,6 +48,11 @@ class InvoiceItem( """ OBJECT_NAME = "invoiceitem" + + class Period(StripeObject): + end: int + start: int + amount: int currency: str customer: ExpandableField["Customer"] @@ -60,7 +65,7 @@ class InvoiceItem( livemode: bool metadata: Optional[Dict[str, str]] object: Literal["invoiceitem"] - period: StripeObject + period: Period plan: Optional["Plan"] price: Optional["Price"] proration: bool @@ -151,3 +156,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"period": Period} diff --git a/stripe/api_resources/invoice_line_item.py b/stripe/api_resources/invoice_line_item.py index 7d083e463..2afd4ad4f 100644 --- a/stripe/api_resources/invoice_line_item.py +++ b/stripe/api_resources/invoice_line_item.py @@ -19,11 +19,53 @@ class InvoiceLineItem(StripeObject): OBJECT_NAME = "line_item" + + class DiscountAmount(StripeObject): + amount: int + discount: ExpandableField["Discount"] + + class Period(StripeObject): + end: int + start: int + + class ProrationDetails(StripeObject): + class CreditedItems(StripeObject): + invoice: str + invoice_line_items: List[str] + + credited_items: Optional[CreditedItems] + _inner_class_types = {"credited_items": CreditedItems} + + class TaxAmount(StripeObject): + amount: int + inclusive: bool + tax_rate: ExpandableField["TaxRate"] + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + amount: int amount_excluding_tax: Optional[int] currency: str description: Optional[str] - discount_amounts: Optional[List[StripeObject]] + discount_amounts: Optional[List[DiscountAmount]] discountable: bool discounts: Optional[List[ExpandableField["Discount"]]] id: str @@ -31,15 +73,22 @@ class InvoiceLineItem(StripeObject): livemode: bool metadata: Dict[str, str] object: Literal["line_item"] - period: StripeObject + period: Period plan: Optional["Plan"] price: Optional["Price"] proration: bool - proration_details: Optional[StripeObject] + proration_details: Optional[ProrationDetails] quantity: Optional[int] subscription: Optional[ExpandableField["Subscription"]] subscription_item: Optional[ExpandableField["SubscriptionItem"]] - tax_amounts: Optional[List[StripeObject]] + tax_amounts: Optional[List[TaxAmount]] tax_rates: Optional[List["TaxRate"]] type: Literal["invoiceitem", "subscription"] unit_amount_excluding_tax: Optional[float] + + _inner_class_types = { + "discount_amounts": DiscountAmount, + "period": Period, + "proration_details": ProrationDetails, + "tax_amounts": TaxAmount, + } diff --git a/stripe/api_resources/issuing/authorization.py b/stripe/api_resources/issuing/authorization.py index 114712ab2..ffddefb19 100644 --- a/stripe/api_resources/issuing/authorization.py +++ b/stripe/api_resources/issuing/authorization.py @@ -36,8 +36,91 @@ class Authorization( """ OBJECT_NAME = "issuing.authorization" + + class AmountDetails(StripeObject): + atm_fee: Optional[int] + cashback_amount: Optional[int] + + class MerchantData(StripeObject): + category: str + category_code: str + city: Optional[str] + country: Optional[str] + name: Optional[str] + network_id: str + postal_code: Optional[str] + state: Optional[str] + terminal_id: Optional[str] + url: Optional[str] + + class NetworkData(StripeObject): + acquiring_institution_id: Optional[str] + + class PendingRequest(StripeObject): + class AmountDetails(StripeObject): + atm_fee: Optional[int] + cashback_amount: Optional[int] + + amount: int + amount_details: Optional[AmountDetails] + currency: str + is_amount_controllable: bool + merchant_amount: int + merchant_currency: str + _inner_class_types = {"amount_details": AmountDetails} + + class RequestHistory(StripeObject): + class AmountDetails(StripeObject): + atm_fee: Optional[int] + cashback_amount: Optional[int] + + amount: int + amount_details: Optional[AmountDetails] + approved: bool + authorization_code: Optional[str] + created: int + currency: str + merchant_amount: int + merchant_currency: str + reason: Literal[ + "account_disabled", + "card_active", + "card_inactive", + "cardholder_inactive", + "cardholder_verification_required", + "insufficient_funds", + "not_allowed", + "spending_controls", + "suspected_fraud", + "verification_failed", + "webhook_approved", + "webhook_declined", + "webhook_error", + "webhook_timeout", + ] + reason_message: Optional[str] + _inner_class_types = {"amount_details": AmountDetails} + + class Treasury(StripeObject): + received_credits: List[str] + received_debits: List[str] + transaction: Optional[str] + + class VerificationData(StripeObject): + class ThreeDSecure(StripeObject): + result: Literal[ + "attempt_acknowledged", "authenticated", "failed", "required" + ] + + address_line1_check: Literal["match", "mismatch", "not_provided"] + address_postal_code_check: Literal["match", "mismatch", "not_provided"] + cvc_check: Literal["match", "mismatch", "not_provided"] + expiry_check: Literal["match", "mismatch", "not_provided"] + three_d_secure: Optional[ThreeDSecure] + _inner_class_types = {"three_d_secure": ThreeDSecure} + amount: int - amount_details: Optional[StripeObject] + amount_details: Optional[AmountDetails] approved: bool authorization_method: Literal[ "chip", "contactless", "keyed_in", "online", "swipe" @@ -51,17 +134,17 @@ class Authorization( livemode: bool merchant_amount: int merchant_currency: str - merchant_data: StripeObject + merchant_data: MerchantData metadata: Dict[str, str] - network_data: Optional[StripeObject] + network_data: Optional[NetworkData] object: Literal["issuing.authorization"] - pending_request: Optional[StripeObject] - request_history: List[StripeObject] + pending_request: Optional[PendingRequest] + request_history: List[RequestHistory] status: Literal["closed", "pending", "reversed"] token: Optional[ExpandableField["Token"]] transactions: List["Transaction"] - treasury: Optional[StripeObject] - verification_data: StripeObject + treasury: Optional[Treasury] + verification_data: VerificationData wallet: Optional[str] @classmethod @@ -321,5 +404,15 @@ def reverse( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "amount_details": AmountDetails, + "merchant_data": MerchantData, + "network_data": NetworkData, + "pending_request": PendingRequest, + "request_history": RequestHistory, + "treasury": Treasury, + "verification_data": VerificationData, + } + Authorization.TestHelpers._resource_cls = Authorization diff --git a/stripe/api_resources/issuing/card.py b/stripe/api_resources/issuing/card.py index 736dedc08..0fa703b72 100644 --- a/stripe/api_resources/issuing/card.py +++ b/stripe/api_resources/issuing/card.py @@ -10,7 +10,7 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal, Type from urllib.parse import quote_plus @@ -33,6 +33,1016 @@ class Card( """ OBJECT_NAME = "issuing.card" + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class AddressValidation(StripeObject): + class NormalizedAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + mode: Literal[ + "disabled", + "normalization_only", + "validation_and_normalization", + ] + normalized_address: Optional[NormalizedAddress] + result: Optional[ + Literal[ + "indeterminate", + "likely_deliverable", + "likely_undeliverable", + ] + ] + _inner_class_types = {"normalized_address": NormalizedAddress} + + class Customs(StripeObject): + eori_number: Optional[str] + + address: Address + address_validation: Optional[AddressValidation] + carrier: Optional[Literal["dhl", "fedex", "royal_mail", "usps"]] + customs: Optional[Customs] + eta: Optional[int] + name: str + phone_number: Optional[str] + require_signature: Optional[bool] + service: Literal["express", "priority", "standard"] + status: Optional[ + Literal[ + "canceled", + "delivered", + "failure", + "pending", + "returned", + "shipped", + ] + ] + tracking_number: Optional[str] + tracking_url: Optional[str] + type: Literal["bulk", "individual"] + _inner_class_types = { + "address": Address, + "address_validation": AddressValidation, + "customs": Customs, + } + + class SpendingControls(StripeObject): + class SpendingLimit(StripeObject): + amount: int + categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + interval: Literal[ + "all_time", + "daily", + "monthly", + "per_authorization", + "weekly", + "yearly", + ] + + allowed_categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + blocked_categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + spending_limits: Optional[List[SpendingLimit]] + spending_limits_currency: Optional[str] + _inner_class_types = {"spending_limits": SpendingLimit} + + class Wallets(StripeObject): + class ApplePay(StripeObject): + eligible: bool + ineligible_reason: Optional[ + Literal[ + "missing_agreement", + "missing_cardholder_contact", + "unsupported_region", + ] + ] + + class GooglePay(StripeObject): + eligible: bool + ineligible_reason: Optional[ + Literal[ + "missing_agreement", + "missing_cardholder_contact", + "unsupported_region", + ] + ] + + apple_pay: ApplePay + google_pay: GooglePay + primary_account_identifier: Optional[str] + _inner_class_types = {"apple_pay": ApplePay, "google_pay": GooglePay} + brand: str cancellation_reason: Optional[Literal["design_rejected", "lost", "stolen"]] cardholder: "Cardholder" @@ -54,11 +1064,11 @@ class Card( replacement_reason: Optional[ Literal["damaged", "expired", "lost", "stolen"] ] - shipping: Optional[StripeObject] - spending_controls: StripeObject + shipping: Optional[Shipping] + spending_controls: SpendingControls status: Literal["active", "canceled", "inactive"] type: Literal["physical", "virtual"] - wallets: Optional[StripeObject] + wallets: Optional[Wallets] @classmethod def create( @@ -262,5 +1272,11 @@ def ship_card( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "shipping": Shipping, + "spending_controls": SpendingControls, + "wallets": Wallets, + } + Card.TestHelpers._resource_cls = Card diff --git a/stripe/api_resources/issuing/cardholder.py b/stripe/api_resources/issuing/cardholder.py index 2f768c7d4..e30e59aa1 100644 --- a/stripe/api_resources/issuing/cardholder.py +++ b/stripe/api_resources/issuing/cardholder.py @@ -5,12 +5,18 @@ ListableAPIResource, UpdateableAPIResource, ) +from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.api_resources.file import File + class Cardholder( CreateableAPIResource["Cardholder"], @@ -24,20 +30,1014 @@ class Cardholder( """ OBJECT_NAME = "issuing.cardholder" - billing: StripeObject - company: Optional[StripeObject] + + class Billing(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address + _inner_class_types = {"address": Address} + + class Company(StripeObject): + tax_id_provided: bool + + class Individual(StripeObject): + class CardIssuing(StripeObject): + class UserTermsAcceptance(StripeObject): + date: Optional[int] + ip: Optional[str] + user_agent: Optional[str] + + user_terms_acceptance: Optional[UserTermsAcceptance] + _inner_class_types = {"user_terms_acceptance": UserTermsAcceptance} + + class Dob(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + class Verification(StripeObject): + class Document(StripeObject): + back: Optional[ExpandableField["File"]] + front: Optional[ExpandableField["File"]] + + document: Optional[Document] + _inner_class_types = {"document": Document} + + card_issuing: Optional[CardIssuing] + dob: Optional[Dob] + first_name: Optional[str] + last_name: Optional[str] + verification: Optional[Verification] + _inner_class_types = { + "card_issuing": CardIssuing, + "dob": Dob, + "verification": Verification, + } + + class Requirements(StripeObject): + disabled_reason: Optional[ + Literal[ + "listed", + "rejected.listed", + "requirements.past_due", + "under_review", + ] + ] + past_due: Optional[ + List[ + Literal[ + "company.tax_id", + "individual.card_issuing.user_terms_acceptance.date", + "individual.card_issuing.user_terms_acceptance.ip", + "individual.dob.day", + "individual.dob.month", + "individual.dob.year", + "individual.first_name", + "individual.last_name", + "individual.verification.document", + ] + ] + ] + + class SpendingControls(StripeObject): + class SpendingLimit(StripeObject): + amount: int + categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + interval: Literal[ + "all_time", + "daily", + "monthly", + "per_authorization", + "weekly", + "yearly", + ] + + allowed_categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + blocked_categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + spending_limits: Optional[List[SpendingLimit]] + spending_limits_currency: Optional[str] + _inner_class_types = {"spending_limits": SpendingLimit} + + billing: Billing + company: Optional[Company] created: int email: Optional[str] id: str - individual: Optional[StripeObject] + individual: Optional[Individual] livemode: bool metadata: Dict[str, str] name: str object: Literal["issuing.cardholder"] phone_number: Optional[str] preferred_locales: Optional[List[Literal["de", "en", "es", "fr", "it"]]] - requirements: StripeObject - spending_controls: Optional[StripeObject] + requirements: Requirements + spending_controls: Optional[SpendingControls] status: Literal["active", "blocked", "inactive"] type: Literal["company", "individual"] @@ -103,3 +1103,11 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "billing": Billing, + "company": Company, + "individual": Individual, + "requirements": Requirements, + "spending_controls": SpendingControls, + } diff --git a/stripe/api_resources/issuing/dispute.py b/stripe/api_resources/issuing/dispute.py index ddc82b70f..7fa1b81fe 100644 --- a/stripe/api_resources/issuing/dispute.py +++ b/stripe/api_resources/issuing/dispute.py @@ -17,6 +17,7 @@ if TYPE_CHECKING: from stripe.api_resources.balance_transaction import BalanceTransaction + from stripe.api_resources.file import File from stripe.api_resources.issuing.transaction import Transaction @@ -32,18 +33,102 @@ class Dispute( """ OBJECT_NAME = "issuing.dispute" + + class Evidence(StripeObject): + class Canceled(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + canceled_at: Optional[int] + cancellation_policy_provided: Optional[bool] + cancellation_reason: Optional[str] + expected_at: Optional[int] + explanation: Optional[str] + product_description: Optional[str] + product_type: Optional[Literal["merchandise", "service"]] + return_status: Optional[Literal["merchant_rejected", "successful"]] + returned_at: Optional[int] + + class Duplicate(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + card_statement: Optional[ExpandableField["File"]] + cash_receipt: Optional[ExpandableField["File"]] + check_image: Optional[ExpandableField["File"]] + explanation: Optional[str] + original_transaction: Optional[str] + + class Fraudulent(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + explanation: Optional[str] + + class MerchandiseNotAsDescribed(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + explanation: Optional[str] + received_at: Optional[int] + return_description: Optional[str] + return_status: Optional[Literal["merchant_rejected", "successful"]] + returned_at: Optional[int] + + class NotReceived(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + expected_at: Optional[int] + explanation: Optional[str] + product_description: Optional[str] + product_type: Optional[Literal["merchandise", "service"]] + + class Other(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + explanation: Optional[str] + product_description: Optional[str] + product_type: Optional[Literal["merchandise", "service"]] + + class ServiceNotAsDescribed(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + canceled_at: Optional[int] + cancellation_reason: Optional[str] + explanation: Optional[str] + received_at: Optional[int] + + canceled: Optional[Canceled] + duplicate: Optional[Duplicate] + fraudulent: Optional[Fraudulent] + merchandise_not_as_described: Optional[MerchandiseNotAsDescribed] + not_received: Optional[NotReceived] + other: Optional[Other] + reason: Literal[ + "canceled", + "duplicate", + "fraudulent", + "merchandise_not_as_described", + "not_received", + "other", + "service_not_as_described", + ] + service_not_as_described: Optional[ServiceNotAsDescribed] + _inner_class_types = { + "canceled": Canceled, + "duplicate": Duplicate, + "fraudulent": Fraudulent, + "merchandise_not_as_described": MerchandiseNotAsDescribed, + "not_received": NotReceived, + "other": Other, + "service_not_as_described": ServiceNotAsDescribed, + } + + class Treasury(StripeObject): + debit_reversal: Optional[str] + received_debit: str + amount: int balance_transactions: Optional[List["BalanceTransaction"]] created: int currency: str - evidence: StripeObject + evidence: Evidence id: str livemode: bool metadata: Dict[str, str] object: Literal["issuing.dispute"] status: Literal["expired", "lost", "submitted", "unsubmitted", "won"] transaction: ExpandableField["Transaction"] - treasury: Optional[StripeObject] + treasury: Optional[Treasury] @classmethod def create( @@ -138,3 +223,5 @@ def submit(self, idempotency_key: Optional[str] = None, **params: Any): idempotency_key=idempotency_key, params=params, ) + + _inner_class_types = {"evidence": Evidence, "treasury": Treasury} diff --git a/stripe/api_resources/issuing/personalization_design.py b/stripe/api_resources/issuing/personalization_design.py index 1d16a813f..75bb35acb 100644 --- a/stripe/api_resources/issuing/personalization_design.py +++ b/stripe/api_resources/issuing/personalization_design.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( APIResourceTestHelpers, @@ -12,7 +10,7 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal, Type from urllib.parse import quote_plus @@ -33,16 +31,56 @@ class PersonalizationDesign( """ OBJECT_NAME = "issuing.personalization_design" + + class CarrierText(StripeObject): + footer_body: Optional[str] + footer_title: Optional[str] + header_body: Optional[str] + header_title: Optional[str] + + class Preferences(StripeObject): + account_default: bool + platform_default: Optional[bool] + + class RejectionReasons(StripeObject): + card_logo: Optional[ + List[ + Literal[ + "geographic_location", + "inappropriate", + "network_name", + "non_binary_image", + "non_fiat_currency", + "other", + "other_entity", + "promotional_material", + ] + ] + ] + carrier_text: Optional[ + List[ + Literal[ + "geographic_location", + "inappropriate", + "network_name", + "non_fiat_currency", + "other", + "other_entity", + "promotional_material", + ] + ] + ] + card_logo: Optional[ExpandableField["File"]] - carrier_text: Optional[StripeObject] + carrier_text: Optional[CarrierText] id: str lookup_key: Optional[str] metadata: Dict[str, str] name: Optional[str] object: Literal["issuing.personalization_design"] physical_bundle: ExpandableField["PhysicalBundle"] - preferences: StripeObject - rejection_reasons: StripeObject + preferences: Preferences + rejection_reasons: RejectionReasons status: Literal["active", "inactive", "rejected", "review"] @classmethod @@ -224,5 +262,11 @@ def reject(self, idempotency_key: Optional[str] = None, **params: Any): def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "carrier_text": CarrierText, + "preferences": Preferences, + "rejection_reasons": RejectionReasons, + } + PersonalizationDesign.TestHelpers._resource_cls = PersonalizationDesign diff --git a/stripe/api_resources/issuing/physical_bundle.py b/stripe/api_resources/issuing/physical_bundle.py index 51a75c5d5..7d7a76c38 100644 --- a/stripe/api_resources/issuing/physical_bundle.py +++ b/stripe/api_resources/issuing/physical_bundle.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject @@ -15,7 +13,12 @@ class PhysicalBundle(ListableAPIResource["PhysicalBundle"]): """ OBJECT_NAME = "issuing.physical_bundle" - features: Optional[StripeObject] + + class Features(StripeObject): + card_logo: Literal["optional", "required", "unsupported"] + carrier_text: Literal["optional", "required", "unsupported"] + + features: Optional[Features] id: str livemode: bool name: str @@ -55,3 +58,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"features": Features} diff --git a/stripe/api_resources/issuing/token.py b/stripe/api_resources/issuing/token.py index ba36822dc..3de15826f 100644 --- a/stripe/api_resources/issuing/token.py +++ b/stripe/api_resources/issuing/token.py @@ -7,7 +7,7 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Optional, cast +from typing import Any, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus @@ -23,6 +23,94 @@ class Token(ListableAPIResource["Token"], UpdateableAPIResource["Token"]): """ OBJECT_NAME = "issuing.token" + + class NetworkData(StripeObject): + class Device(StripeObject): + device_fingerprint: Optional[str] + ip_address: Optional[str] + location: Optional[str] + name: Optional[str] + phone_number: Optional[str] + type: Optional[Literal["other", "phone", "watch"]] + + class Mastercard(StripeObject): + card_reference_id: Optional[str] + token_reference_id: str + token_requestor_id: str + token_requestor_name: Optional[str] + + class Visa(StripeObject): + card_reference_id: str + token_reference_id: str + token_requestor_id: str + token_risk_score: Optional[str] + + class WalletProvider(StripeObject): + class CardholderAddress(StripeObject): + line1: str + postal_code: str + + account_id: Optional[str] + account_trust_score: Optional[int] + card_number_source: Optional[ + Literal["app", "manual", "on_file", "other"] + ] + cardholder_address: Optional[CardholderAddress] + cardholder_name: Optional[str] + device_trust_score: Optional[int] + hashed_account_email_address: Optional[str] + reason_codes: Optional[ + List[ + Literal[ + "account_card_too_new", + "account_recently_changed", + "account_too_new", + "account_too_new_since_launch", + "additional_device", + "data_expired", + "defer_id_v_decision", + "device_recently_lost", + "good_activity_history", + "has_suspended_tokens", + "high_risk", + "inactive_account", + "long_account_tenure", + "low_account_score", + "low_device_score", + "low_phone_number_score", + "network_service_error", + "outside_home_territory", + "provisioning_cardholder_mismatch", + "provisioning_device_and_cardholder_mismatch", + "provisioning_device_mismatch", + "same_device_no_prior_authentication", + "same_device_successful_prior_authentication", + "software_update", + "suspicious_activity", + "too_many_different_cardholders", + "too_many_recent_attempts", + "too_many_recent_tokens", + ] + ] + ] + suggested_decision: Optional[ + Literal["approve", "decline", "require_auth"] + ] + suggested_decision_version: Optional[str] + _inner_class_types = {"cardholder_address": CardholderAddress} + + device: Optional[Device] + mastercard: Optional[Mastercard] + type: Literal["mastercard", "visa"] + visa: Optional[Visa] + wallet_provider: Optional[WalletProvider] + _inner_class_types = { + "device": Device, + "mastercard": Mastercard, + "visa": Visa, + "wallet_provider": WalletProvider, + } + card: ExpandableField["Card"] created: int device_fingerprint: Optional[str] @@ -30,7 +118,7 @@ class Token(ListableAPIResource["Token"], UpdateableAPIResource["Token"]): last4: Optional[str] livemode: bool network: Literal["mastercard", "visa"] - network_data: Optional[StripeObject] + network_data: Optional[NetworkData] network_updated_at: int object: Literal["issuing.token"] status: Literal["active", "deleted", "requested", "suspended"] @@ -78,3 +166,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"network_data": NetworkData} diff --git a/stripe/api_resources/issuing/transaction.py b/stripe/api_resources/issuing/transaction.py index 6a1c3a7ee..383d7acb6 100644 --- a/stripe/api_resources/issuing/transaction.py +++ b/stripe/api_resources/issuing/transaction.py @@ -9,7 +9,7 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal, Type from urllib.parse import quote_plus @@ -37,8 +37,77 @@ class Transaction( """ OBJECT_NAME = "issuing.transaction" + + class AmountDetails(StripeObject): + atm_fee: Optional[int] + cashback_amount: Optional[int] + + class MerchantData(StripeObject): + category: str + category_code: str + city: Optional[str] + country: Optional[str] + name: Optional[str] + network_id: str + postal_code: Optional[str] + state: Optional[str] + terminal_id: Optional[str] + url: Optional[str] + + class NetworkData(StripeObject): + processing_date: Optional[str] + + class PurchaseDetails(StripeObject): + class Flight(StripeObject): + class Segment(StripeObject): + arrival_airport_code: Optional[str] + carrier: Optional[str] + departure_airport_code: Optional[str] + flight_number: Optional[str] + service_class: Optional[str] + stopover_allowed: Optional[bool] + + departure_at: Optional[int] + passenger_name: Optional[str] + refundable: Optional[bool] + segments: Optional[List[Segment]] + travel_agency: Optional[str] + _inner_class_types = {"segments": Segment} + + class Fuel(StripeObject): + type: str + unit: str + unit_cost_decimal: float + volume_decimal: Optional[float] + + class Lodging(StripeObject): + check_in_at: Optional[int] + nights: Optional[int] + + class Receipt(StripeObject): + description: Optional[str] + quantity: Optional[float] + total: Optional[int] + unit_cost: Optional[int] + + flight: Optional[Flight] + fuel: Optional[Fuel] + lodging: Optional[Lodging] + receipt: Optional[List[Receipt]] + reference: Optional[str] + _inner_class_types = { + "flight": Flight, + "fuel": Fuel, + "lodging": Lodging, + "receipt": Receipt, + } + + class Treasury(StripeObject): + received_credit: Optional[str] + received_debit: Optional[str] + amount: int - amount_details: Optional[StripeObject] + amount_details: Optional[AmountDetails] authorization: Optional[ExpandableField["Authorization"]] balance_transaction: Optional[ExpandableField["BalanceTransaction"]] card: ExpandableField["Card"] @@ -50,13 +119,13 @@ class Transaction( livemode: bool merchant_amount: int merchant_currency: str - merchant_data: StripeObject + merchant_data: MerchantData metadata: Dict[str, str] - network_data: Optional[StripeObject] + network_data: Optional[NetworkData] object: Literal["issuing.transaction"] - purchase_details: Optional[StripeObject] + purchase_details: Optional[PurchaseDetails] token: Optional[ExpandableField["Token"]] - treasury: Optional[StripeObject] + treasury: Optional[Treasury] type: Literal["capture", "refund"] wallet: Optional[Literal["apple_pay", "google_pay", "samsung_pay"]] @@ -173,5 +242,13 @@ def refund(self, idempotency_key: Optional[str] = None, **params: Any): def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "amount_details": AmountDetails, + "merchant_data": MerchantData, + "network_data": NetworkData, + "purchase_details": PurchaseDetails, + "treasury": Treasury, + } + Transaction.TestHelpers._resource_cls = Transaction diff --git a/stripe/api_resources/line_item.py b/stripe/api_resources/line_item.py index 5e6b915fa..abdbb6022 100644 --- a/stripe/api_resources/line_item.py +++ b/stripe/api_resources/line_item.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject from typing import List, Optional @@ -10,8 +8,10 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.discount import Discount as DiscountResource from stripe.api_resources.price import Price from stripe.api_resources.product import Product + from stripe.api_resources.tax_rate import TaxRate class LineItem(StripeObject): @@ -20,16 +20,47 @@ class LineItem(StripeObject): """ OBJECT_NAME = "item" + + class Discount(StripeObject): + amount: int + discount: "DiscountResource" + + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + amount_discount: int amount_subtotal: int amount_tax: int amount_total: int currency: str description: str - discounts: Optional[List[StripeObject]] + discounts: Optional[List[Discount]] id: str object: Literal["item"] price: Optional["Price"] product: Optional[ExpandableField["Product"]] quantity: Optional[int] - taxes: Optional[List[StripeObject]] + taxes: Optional[List[Tax]] + + _inner_class_types = {"discounts": Discount, "taxes": Tax} diff --git a/stripe/api_resources/mandate.py b/stripe/api_resources/mandate.py index dd34bd96c..0a314db3c 100644 --- a/stripe/api_resources/mandate.py +++ b/stripe/api_resources/mandate.py @@ -3,7 +3,7 @@ from stripe.api_resources.abstract import APIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject -from typing import Any, Optional +from typing import Any, List, Optional from typing_extensions import Literal from typing_extensions import TYPE_CHECKING @@ -18,15 +18,98 @@ class Mandate(APIResource["Mandate"]): """ OBJECT_NAME = "mandate" - customer_acceptance: StripeObject + + class CustomerAcceptance(StripeObject): + class Offline(StripeObject): + pass + + class Online(StripeObject): + ip_address: Optional[str] + user_agent: Optional[str] + + accepted_at: Optional[int] + offline: Optional[Offline] + online: Optional[Online] + type: Literal["offline", "online"] + _inner_class_types = {"offline": Offline, "online": Online} + + class MultiUse(StripeObject): + pass + + class PaymentMethodDetails(StripeObject): + class AcssDebit(StripeObject): + default_for: Optional[List[Literal["invoice", "subscription"]]] + interval_description: Optional[str] + payment_schedule: Literal["combined", "interval", "sporadic"] + transaction_type: Literal["business", "personal"] + + class AuBecsDebit(StripeObject): + url: str + + class BacsDebit(StripeObject): + network_status: Literal[ + "accepted", "pending", "refused", "revoked" + ] + reference: str + url: str + + class Card(StripeObject): + pass + + class Cashapp(StripeObject): + pass + + class Link(StripeObject): + pass + + class Paypal(StripeObject): + billing_agreement_id: Optional[str] + fingerprint: Optional[str] + payer_id: Optional[str] + verified_email: Optional[str] + + class SepaDebit(StripeObject): + reference: str + url: str + + class UsBankAccount(StripeObject): + pass + + acss_debit: Optional[AcssDebit] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + card: Optional[Card] + cashapp: Optional[Cashapp] + link: Optional[Link] + paypal: Optional[Paypal] + sepa_debit: Optional[SepaDebit] + type: str + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "card": Card, + "cashapp": Cashapp, + "link": Link, + "paypal": Paypal, + "sepa_debit": SepaDebit, + "us_bank_account": UsBankAccount, + } + + class SingleUse(StripeObject): + amount: int + currency: str + + customer_acceptance: CustomerAcceptance id: str livemode: bool - multi_use: Optional[StripeObject] + multi_use: Optional[MultiUse] object: Literal["mandate"] on_behalf_of: Optional[str] payment_method: ExpandableField["PaymentMethod"] - payment_method_details: StripeObject - single_use: Optional[StripeObject] + payment_method_details: PaymentMethodDetails + single_use: Optional[SingleUse] status: Literal["active", "inactive", "pending"] type: Literal["multi_use", "single_use"] @@ -37,3 +120,10 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "customer_acceptance": CustomerAcceptance, + "multi_use": MultiUse, + "payment_method_details": PaymentMethodDetails, + "single_use": SingleUse, + } diff --git a/stripe/api_resources/order.py b/stripe/api_resources/order.py index d04f98135..6bb3d4fe7 100644 --- a/stripe/api_resources/order.py +++ b/stripe/api_resources/order.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ( CreateableAPIResource, @@ -18,10 +16,14 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.account import Account from stripe.api_resources.application import Application from stripe.api_resources.customer import Customer - from stripe.api_resources.discount import Discount + from stripe.api_resources.discount import Discount as DiscountResource from stripe.api_resources.line_item import LineItem + from stripe.api_resources.payment_intent import PaymentIntent + from stripe.api_resources.shipping_rate import ShippingRate + from stripe.api_resources.tax_rate import TaxRate class Order( @@ -38,31 +40,467 @@ class Order( """ OBJECT_NAME = "order" + + class AutomaticTax(StripeObject): + enabled: bool + status: Optional[ + Literal["complete", "failed", "requires_location_inputs"] + ] + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + email: Optional[str] + name: Optional[str] + phone: Optional[str] + _inner_class_types = {"address": Address} + + class Credit(StripeObject): + class GiftCard(StripeObject): + card: str + + amount: int + gift_card: Optional[GiftCard] + ineligible_line_items: Optional[List[str]] + type: Literal["gift_card"] + _inner_class_types = {"gift_card": GiftCard} + + class Payment(StripeObject): + class Settings(StripeObject): + class AutomaticPaymentMethods(StripeObject): + enabled: bool + + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + custom_mandate_url: Optional[str] + interval_description: Optional[str] + payment_schedule: Optional[ + Literal["combined", "interval", "sporadic"] + ] + transaction_type: Optional[ + Literal["business", "personal"] + ] + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class AfterpayClearpay(StripeObject): + capture_method: Optional[ + Literal["automatic", "automatic_async", "manual"] + ] + reference: Optional[str] + setup_future_usage: Optional[Literal["none"]] + + class Alipay(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session"] + ] + + class Bancontact(StripeObject): + preferred_language: Literal["de", "en", "fr", "nl"] + setup_future_usage: Optional[ + Literal["none", "off_session"] + ] + + class Card(StripeObject): + capture_method: Literal[ + "automatic", "automatic_async", "manual" + ] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal[ + "BE", "DE", "ES", "FR", "IE", "NL" + ] + + eu_bank_transfer: Optional[EuBankTransfer] + requested_address_types: Optional[ + List[ + Literal[ + "aba", + "iban", + "sepa", + "sort_code", + "spei", + "swift", + "zengin", + ] + ] + ] + type: Optional[ + Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + ] + _inner_class_types = { + "eu_bank_transfer": EuBankTransfer, + } + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + setup_future_usage: Optional[Literal["none"]] + _inner_class_types = {"bank_transfer": BankTransfer} + + class Ideal(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session"] + ] + + class Klarna(StripeObject): + capture_method: Optional[Literal["manual"]] + preferred_locale: Optional[str] + setup_future_usage: Optional[Literal["none"]] + + class Link(StripeObject): + capture_method: Optional[Literal["manual"]] + persistent_token: Optional[str] + setup_future_usage: Optional[ + Literal["none", "off_session"] + ] + + class Oxxo(StripeObject): + expires_after_days: int + setup_future_usage: Optional[Literal["none"]] + + class P24(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Paypal(StripeObject): + capture_method: Optional[Literal["manual"]] + preferred_locale: Optional[str] + reference: Optional[str] + reference_id: Optional[str] + setup_future_usage: Optional[ + Literal["none", "off_session"] + ] + + class SepaDebit(StripeObject): + class MandateOptions(StripeObject): + pass + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Sofort(StripeObject): + preferred_language: Optional[ + Literal["de", "en", "es", "fr", "it", "nl", "pl"] + ] + setup_future_usage: Optional[ + Literal["none", "off_session"] + ] + + class WechatPay(StripeObject): + app_id: Optional[str] + client: Optional[Literal["android", "ios", "web"]] + setup_future_usage: Optional[Literal["none"]] + + acss_debit: Optional[AcssDebit] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + bancontact: Optional[Bancontact] + card: Optional[Card] + customer_balance: Optional[CustomerBalance] + ideal: Optional[Ideal] + klarna: Optional[Klarna] + link: Optional[Link] + oxxo: Optional[Oxxo] + p24: Optional[P24] + paypal: Optional[Paypal] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + wechat_pay: Optional[WechatPay] + _inner_class_types = { + "acss_debit": AcssDebit, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "bancontact": Bancontact, + "card": Card, + "customer_balance": CustomerBalance, + "ideal": Ideal, + "klarna": Klarna, + "link": Link, + "oxxo": Oxxo, + "p24": P24, + "paypal": Paypal, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "wechat_pay": WechatPay, + } + + class TransferData(StripeObject): + amount: Optional[int] + destination: ExpandableField["Account"] + + application_fee_amount: Optional[int] + automatic_payment_methods: Optional[AutomaticPaymentMethods] + payment_method_options: Optional[PaymentMethodOptions] + payment_method_types: Optional[ + List[ + Literal[ + "acss_debit", + "afterpay_clearpay", + "alipay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "card", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "klarna", + "link", + "oxxo", + "p24", + "paypal", + "sepa_debit", + "sofort", + "wechat_pay", + ] + ] + ] + return_url: Optional[str] + statement_descriptor: Optional[str] + statement_descriptor_suffix: Optional[str] + transfer_data: Optional[TransferData] + _inner_class_types = { + "automatic_payment_methods": AutomaticPaymentMethods, + "payment_method_options": PaymentMethodOptions, + "transfer_data": TransferData, + } + + payment_intent: Optional[ExpandableField["PaymentIntent"]] + settings: Optional[Settings] + status: Optional[ + Literal[ + "canceled", + "complete", + "not_required", + "processing", + "requires_action", + "requires_capture", + "requires_confirmation", + "requires_payment_method", + ] + ] + _inner_class_types = {"settings": Settings} + + class ShippingCost(StripeObject): + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + amount_subtotal: int + amount_tax: int + amount_total: int + shipping_rate: Optional[ExpandableField["ShippingRate"]] + taxes: Optional[List[Tax]] + _inner_class_types = {"taxes": Tax} + + class ShippingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + name: Optional[str] + phone: Optional[str] + _inner_class_types = {"address": Address} + + class TaxDetails(StripeObject): + class TaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "ar_cuit", + "au_abn", + "au_arn", + "bg_uic", + "bo_tin", + "br_cnpj", + "br_cpf", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "ch_vat", + "cl_tin", + "cn_tin", + "co_nit", + "cr_tin", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "hk_br", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kr_brn", + "li_uid", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "no_vat", + "nz_gst", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sv_nit", + "th_vat", + "tr_tin", + "tw_vat", + "ua_vat", + "unknown", + "us_ein", + "uy_ruc", + "ve_rif", + "vn_tin", + "za_vat", + ] + value: Optional[str] + + tax_exempt: Literal["exempt", "none", "reverse"] + tax_ids: List[TaxId] + _inner_class_types = {"tax_ids": TaxId} + + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + discount: "DiscountResource" + + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + discounts: List[Discount] + taxes: List[Tax] + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_credit: Optional[int] + amount_discount: int + amount_shipping: Optional[int] + amount_tax: int + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + amount_remaining: Optional[int] amount_subtotal: int amount_total: int application: Optional[ExpandableField["Application"]] - automatic_tax: Optional[StripeObject] - billing_details: Optional[StripeObject] + automatic_tax: Optional[AutomaticTax] + billing_details: Optional[BillingDetails] client_secret: Optional[str] created: int - credits: Optional[List[StripeObject]] + credits: Optional[List[Credit]] currency: str customer: Optional[ExpandableField["Customer"]] description: Optional[str] - discounts: Optional[List[ExpandableField["Discount"]]] + discounts: Optional[List[ExpandableField["DiscountResource"]]] id: str ip_address: Optional[str] line_items: Optional[ListObject["LineItem"]] livemode: bool metadata: Optional[Dict[str, str]] object: Literal["order"] - payment: StripeObject - shipping_cost: Optional[StripeObject] - shipping_details: Optional[StripeObject] + payment: Payment + shipping_cost: Optional[ShippingCost] + shipping_details: Optional[ShippingDetails] status: Literal["canceled", "complete", "open", "processing", "submitted"] - tax_details: Optional[StripeObject] - total_details: StripeObject + tax_details: Optional[TaxDetails] + total_details: TotalDetails @classmethod def _cls_cancel( @@ -244,3 +682,14 @@ def submit(self, idempotency_key: Optional[str] = None, **params: Any): idempotency_key=idempotency_key, params=params, ) + + _inner_class_types = { + "automatic_tax": AutomaticTax, + "billing_details": BillingDetails, + "credits": Credit, + "payment": Payment, + "shipping_cost": ShippingCost, + "shipping_details": ShippingDetails, + "tax_details": TaxDetails, + "total_details": TotalDetails, + } diff --git a/stripe/api_resources/payment_intent.py b/stripe/api_resources/payment_intent.py index 8454dafcc..0e4a43651 100644 --- a/stripe/api_resources/payment_intent.py +++ b/stripe/api_resources/payment_intent.py @@ -25,6 +25,7 @@ from stripe.api_resources.invoice import Invoice from stripe.api_resources.payment_method import PaymentMethod from stripe.api_resources.review import Review + from stripe.api_resources.setup_intent import SetupIntent class PaymentIntent( @@ -48,13 +49,893 @@ class PaymentIntent( """ OBJECT_NAME = "payment_intent" + + class AmountDetails(StripeObject): + class Tip(StripeObject): + amount: Optional[int] + + tip: Optional[Tip] + _inner_class_types = {"tip": Tip} + + class AutomaticPaymentMethods(StripeObject): + allow_redirects: Optional[Literal["always", "never"]] + enabled: bool + + class LastPaymentError(StripeObject): + charge: Optional[str] + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "debit_not_authorized", + "email_invalid", + "expired_card", + "gift_card_balance_insufficient", + "gift_card_code_exists", + "gift_card_inactive", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sensitive_data_access_expired", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + decline_code: Optional[str] + doc_url: Optional[str] + message: Optional[str] + param: Optional[str] + payment_intent: Optional["PaymentIntent"] + payment_method: Optional["PaymentMethod"] + payment_method_type: Optional[str] + request_log_url: Optional[str] + setup_intent: Optional["SetupIntent"] + source: Optional[Any] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + + class NextAction(StripeObject): + class AlipayHandleRedirect(StripeObject): + native_data: Optional[str] + native_url: Optional[str] + return_url: Optional[str] + url: Optional[str] + + class BoletoDisplayDetails(StripeObject): + expires_at: Optional[int] + hosted_voucher_url: Optional[str] + number: Optional[str] + pdf: Optional[str] + + class CardAwaitNotification(StripeObject): + charge_attempt_at: Optional[int] + customer_approval_required: Optional[bool] + + class CashappHandleRedirectOrDisplayQrCode(StripeObject): + class QrCode(StripeObject): + expires_at: int + image_url_png: str + image_url_svg: str + + hosted_instructions_url: str + mobile_auth_url: str + qr_code: QrCode + _inner_class_types = {"qr_code": QrCode} + + class DisplayBankTransferInstructions(StripeObject): + class FinancialAddress(StripeObject): + class Iban(StripeObject): + account_holder_name: str + bic: str + country: str + iban: str + + class SortCode(StripeObject): + account_holder_name: str + account_number: str + sort_code: str + + class Spei(StripeObject): + bank_code: str + bank_name: str + clabe: str + + class Zengin(StripeObject): + account_holder_name: Optional[str] + account_number: Optional[str] + account_type: Optional[str] + bank_code: Optional[str] + bank_name: Optional[str] + branch_code: Optional[str] + branch_name: Optional[str] + + iban: Optional[Iban] + sort_code: Optional[SortCode] + spei: Optional[Spei] + supported_networks: Optional[ + List[Literal["bacs", "fps", "sepa", "spei", "zengin"]] + ] + type: Literal["iban", "sort_code", "spei", "zengin"] + zengin: Optional[Zengin] + _inner_class_types = { + "iban": Iban, + "sort_code": SortCode, + "spei": Spei, + "zengin": Zengin, + } + + amount_remaining: Optional[int] + currency: Optional[str] + financial_addresses: Optional[List[FinancialAddress]] + hosted_instructions_url: Optional[str] + reference: Optional[str] + type: Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + _inner_class_types = {"financial_addresses": FinancialAddress} + + class KonbiniDisplayDetails(StripeObject): + class Stores(StripeObject): + class Familymart(StripeObject): + confirmation_number: Optional[str] + payment_code: str + + class Lawson(StripeObject): + confirmation_number: Optional[str] + payment_code: str + + class Ministop(StripeObject): + confirmation_number: Optional[str] + payment_code: str + + class Seicomart(StripeObject): + confirmation_number: Optional[str] + payment_code: str + + familymart: Optional[Familymart] + lawson: Optional[Lawson] + ministop: Optional[Ministop] + seicomart: Optional[Seicomart] + _inner_class_types = { + "familymart": Familymart, + "lawson": Lawson, + "ministop": Ministop, + "seicomart": Seicomart, + } + + expires_at: int + hosted_voucher_url: Optional[str] + stores: Stores + _inner_class_types = {"stores": Stores} + + class OxxoDisplayDetails(StripeObject): + expires_after: Optional[int] + hosted_voucher_url: Optional[str] + number: Optional[str] + + class PaynowDisplayQrCode(StripeObject): + data: str + hosted_instructions_url: Optional[str] + image_url_png: str + image_url_svg: str + + class PixDisplayQrCode(StripeObject): + data: Optional[str] + expires_at: Optional[int] + hosted_instructions_url: Optional[str] + image_url_png: Optional[str] + image_url_svg: Optional[str] + + class PromptpayDisplayQrCode(StripeObject): + data: str + hosted_instructions_url: str + image_url_png: str + image_url_svg: str + + class RedirectToUrl(StripeObject): + return_url: Optional[str] + url: Optional[str] + + class VerifyWithMicrodeposits(StripeObject): + arrival_date: int + hosted_verification_url: str + microdeposit_type: Optional[Literal["amounts", "descriptor_code"]] + + class WechatPayDisplayQrCode(StripeObject): + data: str + hosted_instructions_url: str + image_data_url: str + image_url_png: str + image_url_svg: str + + class WechatPayRedirectToAndroidApp(StripeObject): + app_id: str + nonce_str: str + package: str + partner_id: str + prepay_id: str + sign: str + timestamp: str + + class WechatPayRedirectToIosApp(StripeObject): + native_url: str + + alipay_handle_redirect: Optional[AlipayHandleRedirect] + boleto_display_details: Optional[BoletoDisplayDetails] + card_await_notification: Optional[CardAwaitNotification] + cashapp_handle_redirect_or_display_qr_code: Optional[ + CashappHandleRedirectOrDisplayQrCode + ] + display_bank_transfer_instructions: Optional[ + DisplayBankTransferInstructions + ] + konbini_display_details: Optional[KonbiniDisplayDetails] + oxxo_display_details: Optional[OxxoDisplayDetails] + paynow_display_qr_code: Optional[PaynowDisplayQrCode] + pix_display_qr_code: Optional[PixDisplayQrCode] + promptpay_display_qr_code: Optional[PromptpayDisplayQrCode] + redirect_to_url: Optional[RedirectToUrl] + type: str + use_stripe_sdk: Optional[Dict[str, Any]] + verify_with_microdeposits: Optional[VerifyWithMicrodeposits] + wechat_pay_display_qr_code: Optional[WechatPayDisplayQrCode] + wechat_pay_redirect_to_android_app: Optional[ + WechatPayRedirectToAndroidApp + ] + wechat_pay_redirect_to_ios_app: Optional[WechatPayRedirectToIosApp] + _inner_class_types = { + "alipay_handle_redirect": AlipayHandleRedirect, + "boleto_display_details": BoletoDisplayDetails, + "card_await_notification": CardAwaitNotification, + "cashapp_handle_redirect_or_display_qr_code": CashappHandleRedirectOrDisplayQrCode, + "display_bank_transfer_instructions": DisplayBankTransferInstructions, + "konbini_display_details": KonbiniDisplayDetails, + "oxxo_display_details": OxxoDisplayDetails, + "paynow_display_qr_code": PaynowDisplayQrCode, + "pix_display_qr_code": PixDisplayQrCode, + "promptpay_display_qr_code": PromptpayDisplayQrCode, + "redirect_to_url": RedirectToUrl, + "verify_with_microdeposits": VerifyWithMicrodeposits, + "wechat_pay_display_qr_code": WechatPayDisplayQrCode, + "wechat_pay_redirect_to_android_app": WechatPayRedirectToAndroidApp, + "wechat_pay_redirect_to_ios_app": WechatPayRedirectToIosApp, + } + + class PaymentDetails(StripeObject): + class CarRental(StripeObject): + class PickupAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class ReturnAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + booking_number: str + car_class_code: Optional[str] + car_make: Optional[str] + car_model: Optional[str] + company: Optional[str] + customer_service_phone_number: Optional[str] + days_rented: int + extra_charges: Optional[ + List[ + Literal[ + "extra_mileage", + "gas", + "late_return", + "one_way_service", + "parking_violation", + ] + ] + ] + no_show: Optional[bool] + pickup_address: Optional[PickupAddress] + pickup_at: int + rate_amount: Optional[int] + rate_interval: Optional[Literal["day", "month", "week"]] + renter_name: Optional[str] + return_address: Optional[ReturnAddress] + return_at: int + tax_exempt: Optional[bool] + _inner_class_types = { + "pickup_address": PickupAddress, + "return_address": ReturnAddress, + } + + car_rental: Optional[CarRental] + _inner_class_types = {"car_rental": CarRental} + + class PaymentMethodConfigurationDetails(StripeObject): + id: str + parent: Optional[str] + + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + custom_mandate_url: Optional[str] + interval_description: Optional[str] + payment_schedule: Optional[ + Literal["combined", "interval", "sporadic"] + ] + transaction_type: Optional[Literal["business", "personal"]] + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Affirm(StripeObject): + capture_method: Optional[Literal["manual"]] + preferred_locale: Optional[str] + setup_future_usage: Optional[Literal["none"]] + + class AfterpayClearpay(StripeObject): + capture_method: Optional[Literal["manual"]] + reference: Optional[str] + setup_future_usage: Optional[Literal["none"]] + + class Alipay(StripeObject): + setup_future_usage: Optional[Literal["none", "off_session"]] + + class AuBecsDebit(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class BacsDebit(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class Bancontact(StripeObject): + preferred_language: Literal["de", "en", "fr", "nl"] + setup_future_usage: Optional[Literal["none", "off_session"]] + + class Blik(StripeObject): + pass + + class Boleto(StripeObject): + expires_after_days: int + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class Card(StripeObject): + class Installments(StripeObject): + class AvailablePlan(StripeObject): + count: Optional[int] + interval: Optional[Literal["month"]] + type: Literal["fixed_count"] + + class Plan(StripeObject): + count: Optional[int] + interval: Optional[Literal["month"]] + type: Literal["fixed_count"] + + available_plans: Optional[List[AvailablePlan]] + enabled: bool + plan: Optional[Plan] + _inner_class_types = { + "available_plans": AvailablePlan, + "plan": Plan, + } + + class MandateOptions(StripeObject): + amount: int + amount_type: Literal["fixed", "maximum"] + description: Optional[str] + end_date: Optional[int] + interval: Literal["day", "month", "sporadic", "week", "year"] + interval_count: Optional[int] + reference: str + start_date: int + supported_types: Optional[List[Literal["india"]]] + + class StatementDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + phone: Optional[str] + _inner_class_types = {"address": Address} + + capture_method: Optional[Literal["manual"]] + installments: Optional[Installments] + mandate_options: Optional[MandateOptions] + network: Optional[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "interac", + "jcb", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + request_extended_authorization: Optional[ + Literal["if_available", "never"] + ] + request_incremental_authorization: Optional[ + Literal["if_available", "never"] + ] + request_multicapture: Optional[Literal["if_available", "never"]] + request_overcapture: Optional[Literal["if_available", "never"]] + request_three_d_secure: Optional[ + Literal["any", "automatic", "challenge_only"] + ] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + statement_descriptor_suffix_kana: Optional[str] + statement_descriptor_suffix_kanji: Optional[str] + statement_details: Optional[StatementDetails] + _inner_class_types = { + "installments": Installments, + "mandate_options": MandateOptions, + "statement_details": StatementDetails, + } + + class CardPresent(StripeObject): + request_extended_authorization: Optional[bool] + request_incremental_authorization_support: Optional[bool] + + class Cashapp(StripeObject): + capture_method: Optional[Literal["manual"]] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + + eu_bank_transfer: Optional[EuBankTransfer] + requested_address_types: Optional[ + List[ + Literal[ + "aba", + "iban", + "sepa", + "sort_code", + "spei", + "swift", + "zengin", + ] + ] + ] + type: Optional[ + Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + ] + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + setup_future_usage: Optional[Literal["none"]] + _inner_class_types = {"bank_transfer": BankTransfer} + + class Eps(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Fpx(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Giropay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Grabpay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Ideal(StripeObject): + setup_future_usage: Optional[Literal["none", "off_session"]] + + class InteracPresent(StripeObject): + pass + + class Klarna(StripeObject): + capture_method: Optional[Literal["manual"]] + preferred_locale: Optional[str] + setup_future_usage: Optional[Literal["none"]] + + class Konbini(StripeObject): + confirmation_number: Optional[str] + expires_after_days: Optional[int] + expires_at: Optional[int] + product_description: Optional[str] + setup_future_usage: Optional[Literal["none"]] + + class Link(StripeObject): + capture_method: Optional[Literal["manual"]] + persistent_token: Optional[str] + setup_future_usage: Optional[Literal["none", "off_session"]] + + class Oxxo(StripeObject): + expires_after_days: int + setup_future_usage: Optional[Literal["none"]] + + class P24(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Paynow(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class Paypal(StripeObject): + capture_method: Optional[Literal["manual"]] + preferred_locale: Optional[str] + reference: Optional[str] + reference_id: Optional[str] + setup_future_usage: Optional[Literal["none", "off_session"]] + + class Pix(StripeObject): + expires_after_seconds: Optional[int] + expires_at: Optional[int] + setup_future_usage: Optional[Literal["none"]] + + class Promptpay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + class SepaDebit(StripeObject): + class MandateOptions(StripeObject): + pass + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Sofort(StripeObject): + preferred_language: Optional[ + Literal["de", "en", "es", "fr", "it", "nl", "pl"] + ] + setup_future_usage: Optional[Literal["none", "off_session"]] + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + class ManualEntry(StripeObject): + mode: Optional[Literal["automatic", "custom"]] + + manual_entry: Optional[ManualEntry] + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + prefetch: Optional[ + List[ + Literal[ + "balances", + "inferred_balances", + "ownership", + "transactions", + ] + ] + ] + return_url: Optional[str] + _inner_class_types = {"manual_entry": ManualEntry} + + financial_connections: Optional[FinancialConnections] + preferred_settlement_speed: Optional[ + Literal["fastest", "standard"] + ] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = { + "financial_connections": FinancialConnections + } + + class WechatPay(StripeObject): + app_id: Optional[str] + client: Optional[Literal["android", "ios", "web"]] + setup_future_usage: Optional[Literal["none"]] + + class Zip(StripeObject): + setup_future_usage: Optional[Literal["none"]] + + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + link: Optional[Link] + oxxo: Optional[Oxxo] + p24: Optional[P24] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + us_bank_account: Optional[UsBankAccount] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "klarna": Klarna, + "konbini": Konbini, + "link": Link, + "oxxo": Oxxo, + "p24": P24, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "us_bank_account": UsBankAccount, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class Processing(StripeObject): + class Card(StripeObject): + class CustomerNotification(StripeObject): + approval_requested: Optional[bool] + completes_at: Optional[int] + + customer_notification: Optional[CustomerNotification] + _inner_class_types = { + "customer_notification": CustomerNotification + } + + card: Optional[Card] + type: Literal["card"] + _inner_class_types = {"card": Card} + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + class TransferData(StripeObject): + amount: Optional[int] + destination: ExpandableField["Account"] + amount: int amount_capturable: int - amount_details: Optional[StripeObject] + amount_details: Optional[AmountDetails] amount_received: int application: Optional[ExpandableField["Application"]] application_fee_amount: Optional[int] - automatic_payment_methods: Optional[StripeObject] + automatic_payment_methods: Optional[AutomaticPaymentMethods] canceled_at: Optional[int] cancellation_reason: Optional[ Literal[ @@ -76,24 +957,26 @@ class PaymentIntent( description: Optional[str] id: str invoice: Optional[ExpandableField["Invoice"]] - last_payment_error: Optional[StripeObject] + last_payment_error: Optional[LastPaymentError] latest_charge: Optional[ExpandableField["Charge"]] livemode: bool metadata: Dict[str, str] - next_action: Optional[StripeObject] + next_action: Optional[NextAction] object: Literal["payment_intent"] on_behalf_of: Optional[ExpandableField["Account"]] - payment_details: Optional[StripeObject] + payment_details: Optional[PaymentDetails] payment_method: Optional[ExpandableField["PaymentMethod"]] - payment_method_configuration_details: Optional[StripeObject] - payment_method_options: Optional[StripeObject] + payment_method_configuration_details: Optional[ + PaymentMethodConfigurationDetails + ] + payment_method_options: Optional[PaymentMethodOptions] payment_method_types: List[str] - processing: Optional[StripeObject] + processing: Optional[Processing] receipt_email: Optional[str] review: Optional[ExpandableField["Review"]] secret_key_confirmation: Optional[Literal["optional", "required"]] setup_future_usage: Optional[Literal["off_session", "on_session"]] - shipping: Optional[StripeObject] + shipping: Optional[Shipping] source: Optional[ExpandableField[Any]] statement_descriptor: Optional[str] statement_descriptor_suffix: Optional[str] @@ -106,7 +989,7 @@ class PaymentIntent( "requires_payment_method", "succeeded", ] - transfer_data: Optional[StripeObject] + transfer_data: Optional[TransferData] transfer_group: Optional[str] @classmethod @@ -373,3 +1256,16 @@ def search(cls, *args, **kwargs) -> SearchResultObject["PaymentIntent"]: @classmethod def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() + + _inner_class_types = { + "amount_details": AmountDetails, + "automatic_payment_methods": AutomaticPaymentMethods, + "last_payment_error": LastPaymentError, + "next_action": NextAction, + "payment_details": PaymentDetails, + "payment_method_configuration_details": PaymentMethodConfigurationDetails, + "payment_method_options": PaymentMethodOptions, + "processing": Processing, + "shipping": Shipping, + "transfer_data": TransferData, + } diff --git a/stripe/api_resources/payment_link.py b/stripe/api_resources/payment_link.py index face44155..0ff7f318e 100644 --- a/stripe/api_resources/payment_link.py +++ b/stripe/api_resources/payment_link.py @@ -19,6 +19,8 @@ from stripe.api_resources.account import Account from stripe.api_resources.application import Application from stripe.api_resources.line_item import LineItem + from stripe.api_resources.shipping_rate import ShippingRate + from stripe.api_resources.tax_id import TaxId class PaymentLink( @@ -35,27 +37,399 @@ class PaymentLink( """ OBJECT_NAME = "payment_link" + + class AfterCompletion(StripeObject): + class HostedConfirmation(StripeObject): + custom_message: Optional[str] + + class Redirect(StripeObject): + url: str + + hosted_confirmation: Optional[HostedConfirmation] + redirect: Optional[Redirect] + type: Literal["hosted_confirmation", "redirect"] + _inner_class_types = { + "hosted_confirmation": HostedConfirmation, + "redirect": Redirect, + } + + class AutomaticTax(StripeObject): + enabled: bool + + class ConsentCollection(StripeObject): + promotions: Optional[Literal["auto", "none"]] + terms_of_service: Optional[Literal["none", "required"]] + + class CustomField(StripeObject): + class Dropdown(StripeObject): + class Option(StripeObject): + label: str + value: str + + options: List[Option] + _inner_class_types = {"options": Option} + + class Label(StripeObject): + custom: Optional[str] + type: Literal["custom"] + + class Numeric(StripeObject): + maximum_length: Optional[int] + minimum_length: Optional[int] + + class Text(StripeObject): + maximum_length: Optional[int] + minimum_length: Optional[int] + + dropdown: Optional[Dropdown] + key: str + label: Label + numeric: Optional[Numeric] + optional: bool + text: Optional[Text] + type: Literal["dropdown", "numeric", "text"] + _inner_class_types = { + "dropdown": Dropdown, + "label": Label, + "numeric": Numeric, + "text": Text, + } + + class CustomText(StripeObject): + class ShippingAddress(StripeObject): + message: str + + class Submit(StripeObject): + message: str + + class TermsOfServiceAcceptance(StripeObject): + message: str + + shipping_address: Optional[ShippingAddress] + submit: Optional[Submit] + terms_of_service_acceptance: Optional[TermsOfServiceAcceptance] + _inner_class_types = { + "shipping_address": ShippingAddress, + "submit": Submit, + "terms_of_service_acceptance": TermsOfServiceAcceptance, + } + + class InvoiceCreation(StripeObject): + class InvoiceData(StripeObject): + class CustomField(StripeObject): + name: str + value: str + + class RenderingOptions(StripeObject): + amount_tax_display: Optional[str] + + account_tax_ids: Optional[List[ExpandableField["TaxId"]]] + custom_fields: Optional[List[CustomField]] + description: Optional[str] + footer: Optional[str] + metadata: Optional[Dict[str, str]] + rendering_options: Optional[RenderingOptions] + _inner_class_types = { + "custom_fields": CustomField, + "rendering_options": RenderingOptions, + } + + enabled: bool + invoice_data: Optional[InvoiceData] + _inner_class_types = {"invoice_data": InvoiceData} + + class PaymentIntentData(StripeObject): + capture_method: Optional[ + Literal["automatic", "automatic_async", "manual"] + ] + metadata: Dict[str, str] + setup_future_usage: Optional[Literal["off_session", "on_session"]] + statement_descriptor: Optional[str] + statement_descriptor_suffix: Optional[str] + + class PhoneNumberCollection(StripeObject): + enabled: bool + + class ShippingAddressCollection(StripeObject): + allowed_countries: List[ + Literal[ + "AC", + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CV", + "CW", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MK", + "ML", + "MM", + "MN", + "MO", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SZ", + "TA", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + "ZZ", + ] + ] + + class ShippingOption(StripeObject): + shipping_amount: int + shipping_rate: ExpandableField["ShippingRate"] + + class SubscriptionData(StripeObject): + description: Optional[str] + metadata: Dict[str, str] + trial_period_days: Optional[int] + + class TaxIdCollection(StripeObject): + enabled: bool + + class TransferData(StripeObject): + amount: Optional[int] + destination: ExpandableField["Account"] + active: bool - after_completion: StripeObject + after_completion: AfterCompletion allow_promotion_codes: bool application: Optional[ExpandableField["Application"]] application_fee_amount: Optional[int] application_fee_percent: Optional[float] - automatic_tax: StripeObject + automatic_tax: AutomaticTax billing_address_collection: Literal["auto", "required"] - consent_collection: Optional[StripeObject] + consent_collection: Optional[ConsentCollection] currency: str - custom_fields: List[StripeObject] - custom_text: StripeObject + custom_fields: List[CustomField] + custom_text: CustomText customer_creation: Literal["always", "if_required"] id: str - invoice_creation: Optional[StripeObject] + invoice_creation: Optional[InvoiceCreation] line_items: Optional[ListObject["LineItem"]] livemode: bool metadata: Dict[str, str] object: Literal["payment_link"] on_behalf_of: Optional[ExpandableField["Account"]] - payment_intent_data: Optional[StripeObject] + payment_intent_data: Optional[PaymentIntentData] payment_method_collection: Literal["always", "if_required"] payment_method_types: Optional[ List[ @@ -91,13 +465,13 @@ class PaymentLink( ] ] ] - phone_number_collection: StripeObject - shipping_address_collection: Optional[StripeObject] - shipping_options: List[StripeObject] + phone_number_collection: PhoneNumberCollection + shipping_address_collection: Optional[ShippingAddressCollection] + shipping_options: List[ShippingOption] submit_type: Literal["auto", "book", "donate", "pay"] - subscription_data: Optional[StripeObject] - tax_id_collection: StripeObject - transfer_data: Optional[StripeObject] + subscription_data: Optional[SubscriptionData] + tax_id_collection: TaxIdCollection + transfer_data: Optional[TransferData] url: str @classmethod @@ -195,3 +569,19 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "after_completion": AfterCompletion, + "automatic_tax": AutomaticTax, + "consent_collection": ConsentCollection, + "custom_fields": CustomField, + "custom_text": CustomText, + "invoice_creation": InvoiceCreation, + "payment_intent_data": PaymentIntentData, + "phone_number_collection": PhoneNumberCollection, + "shipping_address_collection": ShippingAddressCollection, + "shipping_options": ShippingOption, + "subscription_data": SubscriptionData, + "tax_id_collection": TaxIdCollection, + "transfer_data": TransferData, + } diff --git a/stripe/api_resources/payment_method.py b/stripe/api_resources/payment_method.py index 3a7545df2..9cee1785e 100644 --- a/stripe/api_resources/payment_method.py +++ b/stripe/api_resources/payment_method.py @@ -9,14 +9,16 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.charge import Charge from stripe.api_resources.customer import Customer + from stripe.api_resources.setup_attempt import SetupAttempt class PaymentMethod( @@ -33,44 +35,538 @@ class PaymentMethod( """ OBJECT_NAME = "payment_method" - acss_debit: Optional[StripeObject] - affirm: Optional[StripeObject] - afterpay_clearpay: Optional[StripeObject] - alipay: Optional[StripeObject] - au_becs_debit: Optional[StripeObject] - bacs_debit: Optional[StripeObject] - bancontact: Optional[StripeObject] - billing_details: StripeObject - blik: Optional[StripeObject] - boleto: Optional[StripeObject] - card: Optional[StripeObject] - card_present: Optional[StripeObject] - cashapp: Optional[StripeObject] + + class AcssDebit(StripeObject): + bank_name: Optional[str] + fingerprint: Optional[str] + institution_number: Optional[str] + last4: Optional[str] + transit_number: Optional[str] + + class Affirm(StripeObject): + pass + + class AfterpayClearpay(StripeObject): + pass + + class Alipay(StripeObject): + pass + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + + class BacsDebit(StripeObject): + fingerprint: Optional[str] + last4: Optional[str] + sort_code: Optional[str] + + class Bancontact(StripeObject): + pass + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + email: Optional[str] + name: Optional[str] + phone: Optional[str] + _inner_class_types = {"address": Address} + + class Blik(StripeObject): + pass + + class Boleto(StripeObject): + tax_id: str + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[str] + address_postal_code_check: Optional[str] + cvc_check: Optional[str] + + class Networks(StripeObject): + available: List[str] + preferred: Optional[str] + + class ThreeDSecureUsage(StripeObject): + supported: bool + + class Wallet(StripeObject): + class AmexExpressCheckout(StripeObject): + pass + + class ApplePay(StripeObject): + pass + + class GooglePay(StripeObject): + pass + + class Link(StripeObject): + pass + + class Masterpass(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class ShippingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + billing_address: Optional[BillingAddress] + email: Optional[str] + name: Optional[str] + shipping_address: Optional[ShippingAddress] + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + class SamsungPay(StripeObject): + pass + + class VisaCheckout(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class ShippingAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + billing_address: Optional[BillingAddress] + email: Optional[str] + name: Optional[str] + shipping_address: Optional[ShippingAddress] + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + amex_express_checkout: Optional[AmexExpressCheckout] + apple_pay: Optional[ApplePay] + dynamic_last4: Optional[str] + google_pay: Optional[GooglePay] + link: Optional[Link] + masterpass: Optional[Masterpass] + samsung_pay: Optional[SamsungPay] + type: Literal[ + "amex_express_checkout", + "apple_pay", + "google_pay", + "link", + "masterpass", + "samsung_pay", + "visa_checkout", + ] + visa_checkout: Optional[VisaCheckout] + _inner_class_types = { + "amex_express_checkout": AmexExpressCheckout, + "apple_pay": ApplePay, + "google_pay": GooglePay, + "link": Link, + "masterpass": Masterpass, + "samsung_pay": SamsungPay, + "visa_checkout": VisaCheckout, + } + + brand: str + checks: Optional[Checks] + country: Optional[str] + description: Optional[str] + exp_month: int + exp_year: int + fingerprint: Optional[str] + funding: str + iin: Optional[str] + issuer: Optional[str] + last4: str + networks: Optional[Networks] + three_d_secure_usage: Optional[ThreeDSecureUsage] + wallet: Optional[Wallet] + _inner_class_types = { + "checks": Checks, + "networks": Networks, + "three_d_secure_usage": ThreeDSecureUsage, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Networks(StripeObject): + available: List[str] + preferred: Optional[str] + + brand: Optional[str] + cardholder_name: Optional[str] + country: Optional[str] + description: Optional[str] + exp_month: int + exp_year: int + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + networks: Optional[Networks] + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + _inner_class_types = {"networks": Networks} + + class Cashapp(StripeObject): + buyer_id: Optional[str] + cashtag: Optional[str] + + class CustomerBalance(StripeObject): + pass + + class Eps(StripeObject): + bank: Optional[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + + class Fpx(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + + class Giropay(StripeObject): + pass + + class Grabpay(StripeObject): + pass + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + + class InteracPresent(StripeObject): + class Networks(StripeObject): + available: List[str] + preferred: Optional[str] + + brand: Optional[str] + cardholder_name: Optional[str] + country: Optional[str] + description: Optional[str] + exp_month: int + exp_year: int + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + networks: Optional[Networks] + preferred_locales: Optional[List[str]] + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + _inner_class_types = {"networks": Networks} + + class Klarna(StripeObject): + class Dob(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + dob: Optional[Dob] + _inner_class_types = {"dob": Dob} + + class Konbini(StripeObject): + pass + + class Link(StripeObject): + email: Optional[str] + persistent_token: Optional[str] + + class Oxxo(StripeObject): + pass + + class P24(StripeObject): + bank: Optional[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "volkswagen_bank", + ] + ] + + class Paynow(StripeObject): + pass + + class Paypal(StripeObject): + fingerprint: Optional[str] + payer_email: Optional[str] + payer_id: Optional[str] + verified_email: Optional[str] + + class Pix(StripeObject): + pass + + class Promptpay(StripeObject): + pass + + class RadarOptions(StripeObject): + session: Optional[str] + + class SepaDebit(StripeObject): + class GeneratedFrom(StripeObject): + charge: Optional[ExpandableField["Charge"]] + setup_attempt: Optional[ExpandableField["SetupAttempt"]] + + bank_code: Optional[str] + branch_code: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + generated_from: Optional[GeneratedFrom] + last4: Optional[str] + _inner_class_types = {"generated_from": GeneratedFrom} + + class Sofort(StripeObject): + country: Optional[str] + + class UsBankAccount(StripeObject): + class Networks(StripeObject): + preferred: Optional[str] + supported: List[Literal["ach", "us_domestic_wire"]] + + class StatusDetails(StripeObject): + class Blocked(StripeObject): + network_code: Optional[ + Literal[ + "R02", + "R03", + "R04", + "R05", + "R07", + "R08", + "R10", + "R11", + "R16", + "R20", + "R29", + "R31", + ] + ] + reason: Optional[ + Literal[ + "bank_account_closed", + "bank_account_frozen", + "bank_account_invalid_details", + "bank_account_restricted", + "bank_account_unusable", + "debit_not_authorized", + ] + ] + + blocked: Optional[Blocked] + _inner_class_types = {"blocked": Blocked} + + account_holder_type: Optional[Literal["company", "individual"]] + account_number: Optional[str] + account_type: Optional[Literal["checking", "savings"]] + bank_name: Optional[str] + financial_connections_account: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + networks: Optional[Networks] + routing_number: Optional[str] + status_details: Optional[StatusDetails] + _inner_class_types = { + "networks": Networks, + "status_details": StatusDetails, + } + + class WechatPay(StripeObject): + pass + + class Zip(StripeObject): + pass + + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billing_details: BillingDetails + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] created: int customer: Optional[ExpandableField["Customer"]] - customer_balance: Optional[StripeObject] - eps: Optional[StripeObject] - fpx: Optional[StripeObject] - giropay: Optional[StripeObject] - grabpay: Optional[StripeObject] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] id: str - ideal: Optional[StripeObject] - interac_present: Optional[StripeObject] - klarna: Optional[StripeObject] - konbini: Optional[StripeObject] - link: Optional[StripeObject] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + link: Optional[Link] livemode: bool metadata: Optional[Dict[str, str]] object: Literal["payment_method"] - oxxo: Optional[StripeObject] - p24: Optional[StripeObject] - paynow: Optional[StripeObject] - paypal: Optional[StripeObject] - pix: Optional[StripeObject] - promptpay: Optional[StripeObject] - radar_options: Optional[StripeObject] - sepa_debit: Optional[StripeObject] - sofort: Optional[StripeObject] + oxxo: Optional[Oxxo] + p24: Optional[P24] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + radar_options: Optional[RadarOptions] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] type: Literal[ "acss_debit", "affirm", @@ -106,9 +602,9 @@ class PaymentMethod( "wechat_pay", "zip", ] - us_bank_account: Optional[StripeObject] - wechat_pay: Optional[StripeObject] - zip: Optional[StripeObject] + us_bank_account: Optional[UsBankAccount] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] @classmethod def _cls_attach( @@ -234,3 +730,41 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billing_details": BillingDetails, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "klarna": Klarna, + "konbini": Konbini, + "link": Link, + "oxxo": Oxxo, + "p24": P24, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "radar_options": RadarOptions, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "us_bank_account": UsBankAccount, + "wechat_pay": WechatPay, + "zip": Zip, + } diff --git a/stripe/api_resources/payment_method_configuration.py b/stripe/api_resources/payment_method_configuration.py index f0280c844..7fceaecf9 100644 --- a/stripe/api_resources/payment_method_configuration.py +++ b/stripe/api_resources/payment_method_configuration.py @@ -35,51 +35,422 @@ class PaymentMethodConfiguration( """ OBJECT_NAME = "payment_method_configuration" - acss_debit: Optional[StripeObject] + + class AcssDebit(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Affirm(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class AfterpayClearpay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Alipay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class ApplePay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class AuBecsDebit(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class BacsDebit(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Bancontact(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Blik(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Boleto(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Card(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class CartesBancaires(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Cashapp(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Eps(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Fpx(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Giropay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class GooglePay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Grabpay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class IdBankTransfer(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Ideal(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Jcb(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Klarna(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Konbini(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Link(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Multibanco(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Netbanking(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Oxxo(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class P24(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class PayByBank(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Paynow(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Paypal(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Promptpay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class SepaDebit(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Sofort(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Upi(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class UsBankAccount(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class WechatPay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + preference: Literal["none", "off", "on"] + value: Literal["off", "on"] + + available: bool + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + acss_debit: Optional[AcssDebit] active: bool - affirm: Optional[StripeObject] - afterpay_clearpay: Optional[StripeObject] - alipay: Optional[StripeObject] - apple_pay: Optional[StripeObject] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + apple_pay: Optional[ApplePay] application: Optional[str] - au_becs_debit: Optional[StripeObject] - bacs_debit: Optional[StripeObject] - bancontact: Optional[StripeObject] - blik: Optional[StripeObject] - boleto: Optional[StripeObject] - card: Optional[StripeObject] - cartes_bancaires: Optional[StripeObject] - cashapp: Optional[StripeObject] - eps: Optional[StripeObject] - fpx: Optional[StripeObject] - giropay: Optional[StripeObject] - google_pay: Optional[StripeObject] - grabpay: Optional[StripeObject] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + cartes_bancaires: Optional[CartesBancaires] + cashapp: Optional[Cashapp] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + google_pay: Optional[GooglePay] + grabpay: Optional[Grabpay] id: str - id_bank_transfer: Optional[StripeObject] - ideal: Optional[StripeObject] + id_bank_transfer: Optional[IdBankTransfer] + ideal: Optional[Ideal] is_default: bool - jcb: Optional[StripeObject] - klarna: Optional[StripeObject] - konbini: Optional[StripeObject] - link: Optional[StripeObject] + jcb: Optional[Jcb] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + link: Optional[Link] livemode: bool - multibanco: Optional[StripeObject] + multibanco: Optional[Multibanco] name: str - netbanking: Optional[StripeObject] + netbanking: Optional[Netbanking] object: Literal["payment_method_configuration"] - oxxo: Optional[StripeObject] - p24: Optional[StripeObject] + oxxo: Optional[Oxxo] + p24: Optional[P24] parent: Optional[str] - pay_by_bank: Optional[StripeObject] - paynow: Optional[StripeObject] - paypal: Optional[StripeObject] - promptpay: Optional[StripeObject] - sepa_debit: Optional[StripeObject] - sofort: Optional[StripeObject] - upi: Optional[StripeObject] - us_bank_account: Optional[StripeObject] - wechat_pay: Optional[StripeObject] + pay_by_bank: Optional[PayByBank] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + promptpay: Optional[Promptpay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + upi: Optional[Upi] + us_bank_account: Optional[UsBankAccount] + wechat_pay: Optional[WechatPay] @classmethod def create( @@ -143,3 +514,43 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "apple_pay": ApplePay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "cartes_bancaires": CartesBancaires, + "cashapp": Cashapp, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "google_pay": GooglePay, + "grabpay": Grabpay, + "id_bank_transfer": IdBankTransfer, + "ideal": Ideal, + "jcb": Jcb, + "klarna": Klarna, + "konbini": Konbini, + "link": Link, + "multibanco": Multibanco, + "netbanking": Netbanking, + "oxxo": Oxxo, + "p24": P24, + "pay_by_bank": PayByBank, + "paynow": Paynow, + "paypal": Paypal, + "promptpay": Promptpay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "upi": Upi, + "us_bank_account": UsBankAccount, + "wechat_pay": WechatPay, + } diff --git a/stripe/api_resources/payment_method_domain.py b/stripe/api_resources/payment_method_domain.py index a945554b5..f3040838f 100644 --- a/stripe/api_resources/payment_method_domain.py +++ b/stripe/api_resources/payment_method_domain.py @@ -26,16 +26,49 @@ class PaymentMethodDomain( """ OBJECT_NAME = "payment_method_domain" - apple_pay: StripeObject + + class ApplePay(StripeObject): + class StatusDetails(StripeObject): + error_message: str + + status: Literal["active", "inactive"] + status_details: Optional[StatusDetails] + _inner_class_types = {"status_details": StatusDetails} + + class GooglePay(StripeObject): + class StatusDetails(StripeObject): + error_message: str + + status: Literal["active", "inactive"] + status_details: Optional[StatusDetails] + _inner_class_types = {"status_details": StatusDetails} + + class Link(StripeObject): + class StatusDetails(StripeObject): + error_message: str + + status: Literal["active", "inactive"] + status_details: Optional[StatusDetails] + _inner_class_types = {"status_details": StatusDetails} + + class Paypal(StripeObject): + class StatusDetails(StripeObject): + error_message: str + + status: Literal["active", "inactive"] + status_details: Optional[StatusDetails] + _inner_class_types = {"status_details": StatusDetails} + + apple_pay: ApplePay created: int domain_name: str enabled: bool - google_pay: StripeObject + google_pay: GooglePay id: str - link: StripeObject + link: Link livemode: bool object: Literal["payment_method_domain"] - paypal: StripeObject + paypal: Paypal @classmethod def create( @@ -130,3 +163,10 @@ def validate(self, idempotency_key: Optional[str] = None, **params: Any): idempotency_key=idempotency_key, params=params, ) + + _inner_class_types = { + "apple_pay": ApplePay, + "google_pay": GooglePay, + "link": Link, + "paypal": Paypal, + } diff --git a/stripe/api_resources/person.py b/stripe/api_resources/person.py index 373ef27b4..b3d9d30bd 100644 --- a/stripe/api_resources/person.py +++ b/stripe/api_resources/person.py @@ -2,11 +2,17 @@ # File generated from our OpenAPI spec from stripe.api_resources.abstract import UpdateableAPIResource from stripe.api_resources.account import Account +from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject from typing import Dict, List, Optional from typing_extensions import Literal from urllib.parse import quote_plus +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.api_resources.file import File + class Person(UpdateableAPIResource["Person"]): """ @@ -19,18 +25,233 @@ class Person(UpdateableAPIResource["Person"]): """ OBJECT_NAME = "person" + + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class AddressKana(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + town: Optional[str] + + class AddressKanji(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + town: Optional[str] + + class Dob(StripeObject): + day: Optional[int] + month: Optional[int] + year: Optional[int] + + class FutureRequirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + original_fields_due: List[str] + + class Error(StripeObject): + code: Literal[ + "invalid_address_city_state_postal_code", + "invalid_dob_age_under_18", + "invalid_representative_country", + "invalid_street_address", + "invalid_tos_acceptance", + "invalid_value_other", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_requires_additional_memorandum_of_associations", + ] + reason: str + requirement: str + + alternatives: Optional[List[Alternative]] + currently_due: List[str] + errors: List[Error] + eventually_due: List[str] + past_due: List[str] + pending_verification: List[str] + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + class RegisteredAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class Relationship(StripeObject): + director: Optional[bool] + executive: Optional[bool] + owner: Optional[bool] + percent_ownership: Optional[float] + representative: Optional[bool] + title: Optional[str] + + class Requirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + original_fields_due: List[str] + + class Error(StripeObject): + code: Literal[ + "invalid_address_city_state_postal_code", + "invalid_dob_age_under_18", + "invalid_representative_country", + "invalid_street_address", + "invalid_tos_acceptance", + "invalid_value_other", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_requires_additional_memorandum_of_associations", + ] + reason: str + requirement: str + + alternatives: Optional[List[Alternative]] + currently_due: List[str] + errors: List[Error] + eventually_due: List[str] + past_due: List[str] + pending_verification: List[str] + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + class Verification(StripeObject): + class AdditionalDocument(StripeObject): + back: Optional[ExpandableField["File"]] + details: Optional[str] + details_code: Optional[str] + front: Optional[ExpandableField["File"]] + + class Document(StripeObject): + back: Optional[ExpandableField["File"]] + details: Optional[str] + details_code: Optional[str] + front: Optional[ExpandableField["File"]] + + additional_document: Optional[AdditionalDocument] + details: Optional[str] + details_code: Optional[str] + document: Optional[Document] + status: str + _inner_class_types = { + "additional_document": AdditionalDocument, + "document": Document, + } + account: Optional[str] - address: Optional[StripeObject] - address_kana: Optional[StripeObject] - address_kanji: Optional[StripeObject] + address: Optional[Address] + address_kana: Optional[AddressKana] + address_kanji: Optional[AddressKanji] created: int - dob: Optional[StripeObject] + dob: Optional[Dob] email: Optional[str] first_name: Optional[str] first_name_kana: Optional[str] first_name_kanji: Optional[str] full_name_aliases: Optional[List[str]] - future_requirements: Optional[StripeObject] + future_requirements: Optional[FutureRequirements] gender: Optional[str] id: str id_number_provided: Optional[bool] @@ -44,11 +265,11 @@ class Person(UpdateableAPIResource["Person"]): object: Literal["person"] phone: Optional[str] political_exposure: Optional[Literal["existing", "none"]] - registered_address: Optional[StripeObject] - relationship: Optional[StripeObject] - requirements: Optional[StripeObject] + registered_address: Optional[RegisteredAddress] + relationship: Optional[Relationship] + requirements: Optional[Requirements] ssn_last_4_provided: Optional[bool] - verification: Optional[StripeObject] + verification: Optional[Verification] deleted: Optional[Literal[True]] def instance_url(self): @@ -75,3 +296,15 @@ def retrieve(cls, id, api_key=None, **params): "Use stripe.Account.retrieve_person('account_id', 'person_id') " "(see https://stripe.com/docs/api/persons/retrieve)." ) + + _inner_class_types = { + "address": Address, + "address_kana": AddressKana, + "address_kanji": AddressKanji, + "dob": Dob, + "future_requirements": FutureRequirements, + "registered_address": RegisteredAddress, + "relationship": Relationship, + "requirements": Requirements, + "verification": Verification, + } diff --git a/stripe/api_resources/plan.py b/stripe/api_resources/plan.py index 2e486f076..b2ad9638e 100644 --- a/stripe/api_resources/plan.py +++ b/stripe/api_resources/plan.py @@ -38,6 +38,18 @@ class Plan( """ OBJECT_NAME = "plan" + + class Tier(StripeObject): + flat_amount: Optional[int] + flat_amount_decimal: Optional[float] + unit_amount: Optional[int] + unit_amount_decimal: Optional[float] + up_to: Optional[int] + + class TransformUsage(StripeObject): + divide_by: int + round: Literal["down", "up"] + active: bool aggregate_usage: Optional[ Literal["last_during_period", "last_ever", "max", "sum"] @@ -55,9 +67,9 @@ class Plan( nickname: Optional[str] object: Literal["plan"] product: Optional[ExpandableField["Product"]] - tiers: Optional[List[StripeObject]] + tiers: Optional[List[Tier]] tiers_mode: Optional[Literal["graduated", "volume"]] - transform_usage: Optional[StripeObject] + transform_usage: Optional[TransformUsage] trial_period_days: Optional[int] usage_type: Literal["licensed", "metered"] deleted: Optional[Literal[True]] @@ -140,3 +152,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"tiers": Tier, "transform_usage": TransformUsage} diff --git a/stripe/api_resources/price.py b/stripe/api_resources/price.py index 96a125dfd..dc29528e5 100644 --- a/stripe/api_resources/price.py +++ b/stripe/api_resources/price.py @@ -36,25 +36,81 @@ class Price( """ OBJECT_NAME = "price" + + class CurrencyOptions(StripeObject): + class CustomUnitAmount(StripeObject): + maximum: Optional[int] + minimum: Optional[int] + preset: Optional[int] + + class Tier(StripeObject): + flat_amount: Optional[int] + flat_amount_decimal: Optional[float] + unit_amount: Optional[int] + unit_amount_decimal: Optional[float] + up_to: Optional[int] + + custom_unit_amount: Optional[CustomUnitAmount] + tax_behavior: Optional[ + Literal["exclusive", "inclusive", "unspecified"] + ] + tiers: Optional[List[Tier]] + unit_amount: Optional[int] + unit_amount_decimal: Optional[float] + _inner_class_types = { + "custom_unit_amount": CustomUnitAmount, + "tiers": Tier, + } + + class CustomUnitAmount(StripeObject): + maximum: Optional[int] + minimum: Optional[int] + preset: Optional[int] + + class MigrateTo(StripeObject): + behavior: Literal["at_cycle_end"] + effective_after: int + price: str + + class Recurring(StripeObject): + aggregate_usage: Optional[ + Literal["last_during_period", "last_ever", "max", "sum"] + ] + interval: Literal["day", "month", "week", "year"] + interval_count: int + trial_period_days: Optional[int] + usage_type: Literal["licensed", "metered"] + + class Tier(StripeObject): + flat_amount: Optional[int] + flat_amount_decimal: Optional[float] + unit_amount: Optional[int] + unit_amount_decimal: Optional[float] + up_to: Optional[int] + + class TransformQuantity(StripeObject): + divide_by: int + round: Literal["down", "up"] + active: bool billing_scheme: Literal["per_unit", "tiered"] created: int currency: str - currency_options: Optional[Dict[str, StripeObject]] - custom_unit_amount: Optional[StripeObject] + currency_options: Optional[Dict[str, CurrencyOptions]] + custom_unit_amount: Optional[CustomUnitAmount] id: str livemode: bool lookup_key: Optional[str] metadata: Dict[str, str] - migrate_to: Optional[StripeObject] + migrate_to: Optional[MigrateTo] nickname: Optional[str] object: Literal["price"] product: ExpandableField["Product"] - recurring: Optional[StripeObject] + recurring: Optional[Recurring] tax_behavior: Optional[Literal["exclusive", "inclusive", "unspecified"]] - tiers: Optional[List[StripeObject]] + tiers: Optional[List[Tier]] tiers_mode: Optional[Literal["graduated", "volume"]] - transform_quantity: Optional[StripeObject] + transform_quantity: Optional[TransformQuantity] type: Literal["one_time", "recurring"] unit_amount: Optional[int] unit_amount_decimal: Optional[float] @@ -130,3 +186,12 @@ def search(cls, *args, **kwargs) -> SearchResultObject["Price"]: @classmethod def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() + + _inner_class_types = { + "currency_options": CurrencyOptions, + "custom_unit_amount": CustomUnitAmount, + "migrate_to": MigrateTo, + "recurring": Recurring, + "tiers": Tier, + "transform_quantity": TransformQuantity, + } diff --git a/stripe/api_resources/product.py b/stripe/api_resources/product.py index 024122a85..7c74e3dcb 100644 --- a/stripe/api_resources/product.py +++ b/stripe/api_resources/product.py @@ -42,19 +42,43 @@ class Product( """ OBJECT_NAME = "product" + + class Feature(StripeObject): + name: str + + class PackageDimensions(StripeObject): + height: float + length: float + weight: float + width: float + + class Provisioning(StripeObject): + class GiftCard(StripeObject): + class FixedAmount(StripeObject): + amount: int + currency: str + + fixed_amount: Optional[FixedAmount] + type: Literal["fixed_amount"] + _inner_class_types = {"fixed_amount": FixedAmount} + + gift_card: Optional[GiftCard] + type: Literal["gift_card"] + _inner_class_types = {"gift_card": GiftCard} + active: bool created: int default_price: Optional[ExpandableField["Price"]] description: Optional[str] - features: List[StripeObject] + features: List[Feature] id: str images: List[str] livemode: bool metadata: Dict[str, str] name: str object: Literal["product"] - package_dimensions: Optional[StripeObject] - provisioning: Optional[StripeObject] + package_dimensions: Optional[PackageDimensions] + provisioning: Optional[Provisioning] shippable: Optional[bool] statement_descriptor: Optional[str] tax_code: Optional[ExpandableField["TaxCode"]] @@ -150,3 +174,9 @@ def search(cls, *args, **kwargs) -> SearchResultObject["Product"]: @classmethod def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() + + _inner_class_types = { + "features": Feature, + "package_dimensions": PackageDimensions, + "provisioning": Provisioning, + } diff --git a/stripe/api_resources/promotion_code.py b/stripe/api_resources/promotion_code.py index a6aee0e6f..fe8f6d67f 100644 --- a/stripe/api_resources/promotion_code.py +++ b/stripe/api_resources/promotion_code.py @@ -30,6 +30,18 @@ class PromotionCode( """ OBJECT_NAME = "promotion_code" + + class Restrictions(StripeObject): + class CurrencyOptions(StripeObject): + minimum_amount: int + + currency_options: Optional[Dict[str, CurrencyOptions]] + first_time_transaction: bool + minimum_amount: Optional[int] + minimum_amount_currency: Optional[str] + _inner_class_types = {"currency_options": CurrencyOptions} + _inner_class_dicts = ["currency_options"] + active: bool code: str coupon: "Coupon" @@ -41,7 +53,7 @@ class PromotionCode( max_redemptions: Optional[int] metadata: Optional[Dict[str, str]] object: Literal["promotion_code"] - restrictions: StripeObject + restrictions: Restrictions times_redeemed: int @classmethod @@ -106,3 +118,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"restrictions": Restrictions} diff --git a/stripe/api_resources/quote.py b/stripe/api_resources/quote.py index 91c8ce7c0..09b2f8255 100644 --- a/stripe/api_resources/quote.py +++ b/stripe/api_resources/quote.py @@ -21,11 +21,13 @@ from stripe.api_resources.account import Account from stripe.api_resources.application import Application from stripe.api_resources.customer import Customer - from stripe.api_resources.discount import Discount + from stripe.api_resources.discount import Discount as DiscountResource from stripe.api_resources.invoice import Invoice from stripe.api_resources.line_item import LineItem from stripe.api_resources.subscription import Subscription - from stripe.api_resources.subscription_schedule import SubscriptionSchedule + from stripe.api_resources.subscription_schedule import ( + SubscriptionSchedule as SubscriptionScheduleResource, + ) from stripe.api_resources.tax_rate import TaxRate from stripe.api_resources.test_helpers.test_clock import TestClock @@ -43,28 +45,420 @@ class Quote( """ OBJECT_NAME = "quote" + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + status: Optional[ + Literal["complete", "failed", "requires_location_inputs"] + ] + _inner_class_types = {"liability": Liability} + + class Computed(StripeObject): + class Recurring(StripeObject): + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + discount: "DiscountResource" + + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + discounts: List[Discount] + taxes: List[Tax] + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + amount_shipping: Optional[int] + amount_tax: int + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + + amount_subtotal: int + amount_total: int + interval: Literal["day", "month", "week", "year"] + interval_count: int + total_details: TotalDetails + _inner_class_types = {"total_details": TotalDetails} + + class Upfront(StripeObject): + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + discount: "DiscountResource" + + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + discounts: List[Discount] + taxes: List[Tax] + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + amount_shipping: Optional[int] + amount_tax: int + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + + amount_subtotal: int + amount_total: int + line_items: Optional[ListObject["LineItem"]] + total_details: TotalDetails + _inner_class_types = {"total_details": TotalDetails} + + recurring: Optional[Recurring] + updated_at: Optional[int] + upfront: Upfront + _inner_class_types = {"recurring": Recurring, "upfront": Upfront} + + class FromQuote(StripeObject): + is_revision: bool + quote: ExpandableField["Quote"] + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + days_until_due: Optional[int] + issuer: Optional[Issuer] + _inner_class_types = {"issuer": Issuer} + + class StatusDetails(StripeObject): + class Canceled(StripeObject): + reason: Optional[ + Literal[ + "canceled", + "quote_accepted", + "quote_expired", + "quote_superseded", + "subscription_canceled", + ] + ] + transitioned_at: Optional[int] + + class Stale(StripeObject): + class LastReason(StripeObject): + class SubscriptionChanged(StripeObject): + previous_subscription: Optional["Subscription"] + + class SubscriptionScheduleChanged(StripeObject): + previous_subscription_schedule: Optional[ + "SubscriptionScheduleResource" + ] + + line_invalid: Optional[str] + marked_stale: Optional[str] + subscription_canceled: Optional[str] + subscription_changed: Optional[SubscriptionChanged] + subscription_expired: Optional[str] + subscription_schedule_canceled: Optional[str] + subscription_schedule_changed: Optional[ + SubscriptionScheduleChanged + ] + subscription_schedule_released: Optional[str] + type: Optional[ + Literal[ + "bill_on_acceptance_invalid", + "line_invalid", + "marked_stale", + "subscription_canceled", + "subscription_changed", + "subscription_expired", + "subscription_schedule_canceled", + "subscription_schedule_changed", + "subscription_schedule_released", + ] + ] + _inner_class_types = { + "subscription_changed": SubscriptionChanged, + "subscription_schedule_changed": SubscriptionScheduleChanged, + } + + expires_at: Optional[int] + last_reason: Optional[LastReason] + last_updated_at: Optional[int] + transitioned_at: Optional[int] + _inner_class_types = {"last_reason": LastReason} + + canceled: Optional[Canceled] + stale: Optional[Stale] + _inner_class_types = {"canceled": Canceled, "stale": Stale} + + class StatusTransitions(StripeObject): + accepted_at: Optional[int] + canceled_at: Optional[int] + finalized_at: Optional[int] + + class SubscriptionData(StripeObject): + class BillOnAcceptance(StripeObject): + class BillFrom(StripeObject): + class LineStartsAt(StripeObject): + id: str + + computed: Optional[int] + line_starts_at: Optional[LineStartsAt] + timestamp: Optional[int] + type: Literal[ + "line_starts_at", + "now", + "pause_collection_start", + "quote_acceptance_date", + "timestamp", + ] + _inner_class_types = {"line_starts_at": LineStartsAt} + + class BillUntil(StripeObject): + class Duration(StripeObject): + interval: Literal["day", "month", "week", "year"] + interval_count: int + + class LineEndsAt(StripeObject): + id: str + + computed: Optional[int] + duration: Optional[Duration] + line_ends_at: Optional[LineEndsAt] + timestamp: Optional[int] + type: Literal[ + "duration", + "line_ends_at", + "schedule_end", + "timestamp", + "upcoming_invoice", + ] + _inner_class_types = { + "duration": Duration, + "line_ends_at": LineEndsAt, + } + + bill_from: Optional[BillFrom] + bill_until: Optional[BillUntil] + _inner_class_types = { + "bill_from": BillFrom, + "bill_until": BillUntil, + } + + class Prebilling(StripeObject): + iterations: int + + bill_on_acceptance: Optional[BillOnAcceptance] + billing_behavior: Optional[ + Literal["prorate_on_next_phase", "prorate_up_front"] + ] + billing_cycle_anchor: Optional[Literal["reset"]] + description: Optional[str] + effective_date: Optional[int] + end_behavior: Optional[Literal["cancel", "release"]] + from_schedule: Optional[ + ExpandableField["SubscriptionScheduleResource"] + ] + from_subscription: Optional[ExpandableField["Subscription"]] + prebilling: Optional[Prebilling] + proration_behavior: Optional[ + Literal["always_invoice", "create_prorations", "none"] + ] + trial_period_days: Optional[int] + _inner_class_types = { + "bill_on_acceptance": BillOnAcceptance, + "prebilling": Prebilling, + } + + class SubscriptionDataOverride(StripeObject): + class AppliesTo(StripeObject): + new_reference: Optional[str] + subscription_schedule: Optional[str] + type: Literal["new_reference", "subscription_schedule"] + + class BillOnAcceptance(StripeObject): + class BillFrom(StripeObject): + class LineStartsAt(StripeObject): + id: str + + computed: Optional[int] + line_starts_at: Optional[LineStartsAt] + timestamp: Optional[int] + type: Literal[ + "line_starts_at", + "now", + "pause_collection_start", + "quote_acceptance_date", + "timestamp", + ] + _inner_class_types = {"line_starts_at": LineStartsAt} + + class BillUntil(StripeObject): + class Duration(StripeObject): + interval: Literal["day", "month", "week", "year"] + interval_count: int + + class LineEndsAt(StripeObject): + id: str + + computed: Optional[int] + duration: Optional[Duration] + line_ends_at: Optional[LineEndsAt] + timestamp: Optional[int] + type: Literal[ + "duration", + "line_ends_at", + "schedule_end", + "timestamp", + "upcoming_invoice", + ] + _inner_class_types = { + "duration": Duration, + "line_ends_at": LineEndsAt, + } + + bill_from: Optional[BillFrom] + bill_until: Optional[BillUntil] + _inner_class_types = { + "bill_from": BillFrom, + "bill_until": BillUntil, + } + + applies_to: AppliesTo + bill_on_acceptance: Optional[BillOnAcceptance] + billing_behavior: Optional[ + Literal["prorate_on_next_phase", "prorate_up_front"] + ] + customer: Optional[str] + description: Optional[str] + end_behavior: Optional[Literal["cancel", "release"]] + proration_behavior: Optional[ + Literal["always_invoice", "create_prorations", "none"] + ] + _inner_class_types = { + "applies_to": AppliesTo, + "bill_on_acceptance": BillOnAcceptance, + } + + class SubscriptionSchedule(StripeObject): + class AppliesTo(StripeObject): + new_reference: Optional[str] + subscription_schedule: Optional[str] + type: Literal["new_reference", "subscription_schedule"] + + applies_to: AppliesTo + subscription_schedule: str + _inner_class_types = {"applies_to": AppliesTo} + + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + discount: "DiscountResource" + + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + discounts: List[Discount] + taxes: List[Tax] + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + amount_shipping: Optional[int] + amount_tax: int + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + + class TransferData(StripeObject): + amount: Optional[int] + amount_percent: Optional[float] + destination: ExpandableField["Account"] + allow_backdated_lines: Optional[bool] amount_subtotal: int amount_total: int application: Optional[ExpandableField["Application"]] application_fee_amount: Optional[int] application_fee_percent: Optional[float] - automatic_tax: StripeObject + automatic_tax: AutomaticTax collection_method: Literal["charge_automatically", "send_invoice"] - computed: StripeObject + computed: Computed created: int currency: Optional[str] customer: Optional[ExpandableField["Customer"]] default_tax_rates: Optional[List[ExpandableField["TaxRate"]]] description: Optional[str] - discounts: List[ExpandableField["Discount"]] + discounts: List[ExpandableField["DiscountResource"]] expires_at: int footer: Optional[str] - from_quote: Optional[StripeObject] + from_quote: Optional[FromQuote] header: Optional[str] id: str invoice: Optional[ExpandableField["Invoice"]] - invoice_settings: Optional[StripeObject] + invoice_settings: Optional[InvoiceSettings] line_items: Optional[ListObject["LineItem"]] lines: Optional[List[str]] livemode: bool @@ -75,16 +469,18 @@ class Quote( status: Literal[ "accepted", "accepting", "canceled", "draft", "open", "stale" ] - status_details: Optional[StripeObject] - status_transitions: StripeObject + status_details: Optional[StatusDetails] + status_transitions: StatusTransitions subscription: Optional[ExpandableField["Subscription"]] - subscription_data: StripeObject - subscription_data_overrides: Optional[List[StripeObject]] - subscription_schedule: Optional[ExpandableField["SubscriptionSchedule"]] - subscription_schedules: Optional[List[StripeObject]] + subscription_data: SubscriptionData + subscription_data_overrides: Optional[List[SubscriptionDataOverride]] + subscription_schedule: Optional[ + ExpandableField["SubscriptionScheduleResource"] + ] + subscription_schedules: Optional[List[SubscriptionSchedule]] test_clock: Optional[ExpandableField["TestClock"]] - total_details: StripeObject - transfer_data: Optional[StripeObject] + total_details: TotalDetails + transfer_data: Optional[TransferData] @classmethod def _cls_accept( @@ -550,3 +946,17 @@ def list_preview_subscription_schedules( stripe_account=stripe_account, params=params, ) + + _inner_class_types = { + "automatic_tax": AutomaticTax, + "computed": Computed, + "from_quote": FromQuote, + "invoice_settings": InvoiceSettings, + "status_details": StatusDetails, + "status_transitions": StatusTransitions, + "subscription_data": SubscriptionData, + "subscription_data_overrides": SubscriptionDataOverride, + "subscription_schedules": SubscriptionSchedule, + "total_details": TotalDetails, + "transfer_data": TransferData, + } diff --git a/stripe/api_resources/quote_line.py b/stripe/api_resources/quote_line.py index af9cb7fba..c86e92b7b 100644 --- a/stripe/api_resources/quote_line.py +++ b/stripe/api_resources/quote_line.py @@ -1,11 +1,18 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - +from stripe.api_resources.expandable_field import ExpandableField from stripe.stripe_object import StripeObject -from typing import List, Optional +from typing import Dict, List, Optional from typing_extensions import Literal +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.api_resources.coupon import Coupon + from stripe.api_resources.discount import Discount as DiscountResource + from stripe.api_resources.price import Price + from stripe.api_resources.tax_rate import TaxRate + class QuoteLine(StripeObject): """ @@ -13,16 +20,207 @@ class QuoteLine(StripeObject): """ OBJECT_NAME = "quote_line" - actions: Optional[List[StripeObject]] - applies_to: Optional[StripeObject] + + class Action(StripeObject): + class AddDiscount(StripeObject): + class DiscountEnd(StripeObject): + type: Literal["line_ends_at"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + index: Optional[int] + _inner_class_types = {"discount_end": DiscountEnd} + + class AddItem(StripeObject): + class Discount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + class Trial(StripeObject): + converts_to: Optional[List[str]] + type: Literal["free", "paid"] + + discounts: Optional[List[Discount]] + metadata: Optional[Dict[str, str]] + price: ExpandableField["Price"] + quantity: Optional[int] + tax_rates: Optional[List["TaxRate"]] + trial: Optional[Trial] + _inner_class_types = {"discounts": Discount, "trial": Trial} + + class RemoveDiscount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + class RemoveItem(StripeObject): + price: ExpandableField["Price"] + + class SetDiscount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + class SetItem(StripeObject): + class Discount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + class Trial(StripeObject): + converts_to: Optional[List[str]] + type: Literal["free", "paid"] + + discounts: Optional[List[Discount]] + metadata: Optional[Dict[str, str]] + price: ExpandableField["Price"] + quantity: Optional[int] + tax_rates: Optional[List["TaxRate"]] + trial: Optional[Trial] + _inner_class_types = {"discounts": Discount, "trial": Trial} + + add_discount: Optional[AddDiscount] + add_item: Optional[AddItem] + add_metadata: Optional[Dict[str, str]] + remove_discount: Optional[RemoveDiscount] + remove_item: Optional[RemoveItem] + remove_metadata: Optional[List[str]] + set_discounts: Optional[List[SetDiscount]] + set_items: Optional[List[SetItem]] + set_metadata: Optional[Dict[str, str]] + type: Literal[ + "add_discount", + "add_item", + "add_metadata", + "clear_discounts", + "clear_metadata", + "remove_discount", + "remove_item", + "remove_metadata", + "set_discounts", + "set_items", + "set_metadata", + ] + _inner_class_types = { + "add_discount": AddDiscount, + "add_item": AddItem, + "remove_discount": RemoveDiscount, + "remove_item": RemoveItem, + "set_discounts": SetDiscount, + "set_items": SetItem, + } + + class AppliesTo(StripeObject): + new_reference: Optional[str] + subscription_schedule: Optional[str] + type: Literal["new_reference", "subscription_schedule"] + + class EndsAt(StripeObject): + class DiscountEnd(StripeObject): + discount: str + + class Duration(StripeObject): + interval: Literal["day", "month", "week", "year"] + interval_count: int + + computed: Optional[int] + discount_end: Optional[DiscountEnd] + duration: Optional[Duration] + timestamp: Optional[int] + type: Literal[ + "discount_end", + "duration", + "quote_acceptance_date", + "schedule_end", + "timestamp", + "upcoming_invoice", + ] + _inner_class_types = { + "discount_end": DiscountEnd, + "duration": Duration, + } + + class SetPauseCollection(StripeObject): + class Set(StripeObject): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + + set: Optional[Set] + type: Literal["remove", "set"] + _inner_class_types = {"set": Set} + + class StartsAt(StripeObject): + class DiscountEnd(StripeObject): + discount: str + + class LineEndsAt(StripeObject): + id: str + + computed: Optional[int] + discount_end: Optional[DiscountEnd] + line_ends_at: Optional[LineEndsAt] + timestamp: Optional[int] + type: Literal[ + "discount_end", + "line_ends_at", + "now", + "quote_acceptance_date", + "schedule_end", + "timestamp", + "upcoming_invoice", + ] + _inner_class_types = { + "discount_end": DiscountEnd, + "line_ends_at": LineEndsAt, + } + + class TrialSettings(StripeObject): + class EndBehavior(StripeObject): + prorate_up_front: Optional[Literal["defer", "include"]] + + end_behavior: Optional[EndBehavior] + _inner_class_types = {"end_behavior": EndBehavior} + + actions: Optional[List[Action]] + applies_to: Optional[AppliesTo] billing_cycle_anchor: Optional[Literal["automatic", "line_starts_at"]] - ends_at: Optional[StripeObject] + ends_at: Optional[EndsAt] id: str object: Literal["quote_line"] proration_behavior: Optional[ Literal["always_invoice", "create_prorations", "none"] ] - set_pause_collection: Optional[StripeObject] + set_pause_collection: Optional[SetPauseCollection] set_schedule_end: Optional[Literal["line_ends_at", "line_starts_at"]] - starts_at: Optional[StripeObject] - trial_settings: Optional[StripeObject] + starts_at: Optional[StartsAt] + trial_settings: Optional[TrialSettings] + + _inner_class_types = { + "actions": Action, + "applies_to": AppliesTo, + "ends_at": EndsAt, + "set_pause_collection": SetPauseCollection, + "starts_at": StartsAt, + "trial_settings": TrialSettings, + } diff --git a/stripe/api_resources/quote_phase.py b/stripe/api_resources/quote_phase.py index fff7df882..b47f5ddd5 100644 --- a/stripe/api_resources/quote_phase.py +++ b/stripe/api_resources/quote_phase.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe import util from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField @@ -13,7 +11,7 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: - from stripe.api_resources.discount import Discount + from stripe.api_resources.discount import Discount as DiscountResource from stripe.api_resources.line_item import LineItem from stripe.api_resources.tax_rate import TaxRate @@ -24,6 +22,50 @@ class QuotePhase(ListableAPIResource["QuotePhase"]): """ OBJECT_NAME = "quote_phase" + + class InvoiceSettings(StripeObject): + days_until_due: Optional[int] + + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + discount: "DiscountResource" + + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + discounts: List[Discount] + taxes: List[Tax] + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + amount_shipping: Optional[int] + amount_tax: int + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + amount_subtotal: int amount_total: int billing_cycle_anchor: Optional[Literal["reset"]] @@ -31,15 +73,15 @@ class QuotePhase(ListableAPIResource["QuotePhase"]): Literal["charge_automatically", "send_invoice"] ] default_tax_rates: Optional[List[ExpandableField["TaxRate"]]] - discounts: List[ExpandableField["Discount"]] + discounts: List[ExpandableField["DiscountResource"]] end_date: Optional[int] id: str - invoice_settings: Optional[StripeObject] + invoice_settings: Optional[InvoiceSettings] iterations: Optional[int] line_items: Optional[ListObject["LineItem"]] object: Literal["quote_phase"] proration_behavior: Literal["always_invoice", "create_prorations", "none"] - total_details: StripeObject + total_details: TotalDetails trial: Optional[bool] trial_end: Optional[int] @@ -108,3 +150,8 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "invoice_settings": InvoiceSettings, + "total_details": TotalDetails, + } diff --git a/stripe/api_resources/quote_preview_invoice.py b/stripe/api_resources/quote_preview_invoice.py index 03f665606..5d94c2b9c 100644 --- a/stripe/api_resources/quote_preview_invoice.py +++ b/stripe/api_resources/quote_preview_invoice.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject @@ -20,6 +18,8 @@ from stripe.api_resources.payment_intent import PaymentIntent from stripe.api_resources.payment_method import PaymentMethod from stripe.api_resources.quote import Quote + from stripe.api_resources.setup_intent import SetupIntent + from stripe.api_resources.shipping_rate import ShippingRate from stripe.api_resources.subscription import Subscription from stripe.api_resources.tax_id import TaxId from stripe.api_resources.tax_rate import TaxRate @@ -63,6 +63,551 @@ class QuotePreviewInvoice(ListableAPIResource["QuotePreviewInvoice"]): """ OBJECT_NAME = "quote_preview_invoice" + + class AppliesTo(StripeObject): + new_reference: Optional[str] + subscription_schedule: Optional[str] + type: Literal["new_reference", "subscription_schedule"] + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + status: Optional[ + Literal["complete", "failed", "requires_location_inputs"] + ] + _inner_class_types = {"liability": Liability} + + class CustomField(StripeObject): + name: str + value: str + + class CustomerAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class CustomerShipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + class CustomerTaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "ar_cuit", + "au_abn", + "au_arn", + "bg_uic", + "bo_tin", + "br_cnpj", + "br_cpf", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "ch_vat", + "cl_tin", + "cn_tin", + "co_nit", + "cr_tin", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "hk_br", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kr_brn", + "li_uid", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "no_vat", + "nz_gst", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sv_nit", + "th_vat", + "tr_tin", + "tw_vat", + "ua_vat", + "unknown", + "us_ein", + "uy_ruc", + "ve_rif", + "vn_tin", + "za_vat", + ] + value: Optional[str] + + class FromInvoice(StripeObject): + action: str + invoice: ExpandableField["Invoice"] + + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + class LastFinalizationError(StripeObject): + charge: Optional[str] + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "debit_not_authorized", + "email_invalid", + "expired_card", + "gift_card_balance_insufficient", + "gift_card_code_exists", + "gift_card_inactive", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sensitive_data_access_expired", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + decline_code: Optional[str] + doc_url: Optional[str] + message: Optional[str] + param: Optional[str] + payment_intent: Optional["PaymentIntent"] + payment_method: Optional["PaymentMethod"] + payment_method_type: Optional[str] + request_log_url: Optional[str] + setup_intent: Optional["SetupIntent"] + source: Optional[Any] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + + class PaymentSettings(StripeObject): + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + transaction_type: Optional[Literal["business", "personal"]] + + mandate_options: Optional[MandateOptions] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Bancontact(StripeObject): + preferred_language: Literal["de", "en", "fr", "nl"] + + class Card(StripeObject): + class Installments(StripeObject): + enabled: Optional[bool] + + installments: Optional[Installments] + request_three_d_secure: Optional[Literal["any", "automatic"]] + _inner_class_types = {"installments": Installments} + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + + eu_bank_transfer: Optional[EuBankTransfer] + type: Optional[str] + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + _inner_class_types = {"bank_transfer": BankTransfer} + + class Konbini(StripeObject): + pass + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + prefetch: Optional[ + List[ + Literal[ + "balances", + "inferred_balances", + "ownership", + "transactions", + ] + ] + ] + + financial_connections: Optional[FinancialConnections] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = { + "financial_connections": FinancialConnections, + } + + acss_debit: Optional[AcssDebit] + bancontact: Optional[Bancontact] + card: Optional[Card] + customer_balance: Optional[CustomerBalance] + konbini: Optional[Konbini] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "bancontact": Bancontact, + "card": Card, + "customer_balance": CustomerBalance, + "konbini": Konbini, + "us_bank_account": UsBankAccount, + } + + default_mandate: Optional[str] + payment_method_options: Optional[PaymentMethodOptions] + payment_method_types: Optional[ + List[ + Literal[ + "ach_credit_transfer", + "ach_debit", + "acss_debit", + "au_becs_debit", + "bacs_debit", + "bancontact", + "boleto", + "card", + "cashapp", + "customer_balance", + "fpx", + "giropay", + "grabpay", + "ideal", + "konbini", + "link", + "paynow", + "paypal", + "promptpay", + "sepa_credit_transfer", + "sepa_debit", + "sofort", + "us_bank_account", + "wechat_pay", + ] + ] + ] + _inner_class_types = {"payment_method_options": PaymentMethodOptions} + + class Rendering(StripeObject): + class Pdf(StripeObject): + page_size: Optional[Literal["a4", "auto", "letter"]] + + amount_tax_display: Optional[str] + pdf: Optional[Pdf] + _inner_class_types = {"pdf": Pdf} + + class RenderingOptions(StripeObject): + amount_tax_display: Optional[str] + + class ShippingCost(StripeObject): + class Tax(StripeObject): + amount: int + rate: "TaxRate" + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + amount_subtotal: int + amount_tax: int + amount_total: int + shipping_rate: Optional[ExpandableField["ShippingRate"]] + taxes: Optional[List[Tax]] + _inner_class_types = {"taxes": Tax} + + class ShippingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + class StatusTransitions(StripeObject): + finalized_at: Optional[int] + marked_uncollectible_at: Optional[int] + paid_at: Optional[int] + voided_at: Optional[int] + + class SubscriptionDetails(StripeObject): + class PauseCollection(StripeObject): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + resumes_at: Optional[int] + + metadata: Optional[Dict[str, str]] + pause_collection: Optional[PauseCollection] + _inner_class_types = {"pause_collection": PauseCollection} + + class ThresholdReason(StripeObject): + class ItemReason(StripeObject): + line_item_ids: List[str] + usage_gte: int + + amount_gte: Optional[int] + item_reasons: List[ItemReason] + _inner_class_types = {"item_reasons": ItemReason} + + class TotalDiscountAmount(StripeObject): + amount: int + discount: ExpandableField["Discount"] + + class TotalTaxAmount(StripeObject): + amount: int + inclusive: bool + tax_rate: ExpandableField["TaxRate"] + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + taxable_amount: Optional[int] + + class TransferData(StripeObject): + amount: Optional[int] + destination: ExpandableField["Account"] + account_country: Optional[str] account_name: Optional[str] account_tax_ids: Optional[List[ExpandableField["TaxId"]]] @@ -72,10 +617,10 @@ class QuotePreviewInvoice(ListableAPIResource["QuotePreviewInvoice"]): amount_shipping: int application: Optional[ExpandableField["Application"]] application_fee_amount: Optional[int] - applies_to: StripeObject + applies_to: AppliesTo attempt_count: int attempted: bool - automatic_tax: StripeObject + automatic_tax: AutomaticTax billing_reason: Optional[ Literal[ "automatic_pending_invoice_item_invoice", @@ -92,14 +637,14 @@ class QuotePreviewInvoice(ListableAPIResource["QuotePreviewInvoice"]): collection_method: Literal["charge_automatically", "send_invoice"] created: int currency: str - custom_fields: Optional[List[StripeObject]] - customer_address: Optional[StripeObject] + custom_fields: Optional[List[CustomField]] + customer_address: Optional[CustomerAddress] customer_email: Optional[str] customer_name: Optional[str] customer_phone: Optional[str] - customer_shipping: Optional[StripeObject] + customer_shipping: Optional[CustomerShipping] customer_tax_exempt: Optional[Literal["exempt", "none", "reverse"]] - customer_tax_ids: Optional[List[StripeObject]] + customer_tax_ids: Optional[List[CustomerTaxId]] default_payment_method: Optional[ExpandableField["PaymentMethod"]] default_source: Optional[ExpandableField[Any]] default_tax_rates: List["TaxRate"] @@ -110,10 +655,10 @@ class QuotePreviewInvoice(ListableAPIResource["QuotePreviewInvoice"]): effective_at: Optional[int] ending_balance: Optional[int] footer: Optional[str] - from_invoice: Optional[StripeObject] + from_invoice: Optional[FromInvoice] id: str - issuer: Optional[StripeObject] - last_finalization_error: Optional[StripeObject] + issuer: Optional[Issuer] + last_finalization_error: Optional[LastFinalizationError] latest_revision: Optional[ExpandableField["Invoice"]] lines: ListObject["InvoiceLineItem"] livemode: bool @@ -125,34 +670,34 @@ class QuotePreviewInvoice(ListableAPIResource["QuotePreviewInvoice"]): paid: bool paid_out_of_band: bool payment_intent: Optional[ExpandableField["PaymentIntent"]] - payment_settings: StripeObject + payment_settings: PaymentSettings period_end: int period_start: int post_payment_credit_notes_amount: int pre_payment_credit_notes_amount: int quote: Optional[ExpandableField["Quote"]] receipt_number: Optional[str] - rendering: Optional[StripeObject] - rendering_options: Optional[StripeObject] - shipping_cost: Optional[StripeObject] - shipping_details: Optional[StripeObject] + rendering: Optional[Rendering] + rendering_options: Optional[RenderingOptions] + shipping_cost: Optional[ShippingCost] + shipping_details: Optional[ShippingDetails] starting_balance: int statement_descriptor: Optional[str] status: Optional[Literal["draft", "open", "paid", "uncollectible", "void"]] - status_transitions: StripeObject + status_transitions: StatusTransitions subscription: Optional[ExpandableField["Subscription"]] - subscription_details: Optional[StripeObject] + subscription_details: Optional[SubscriptionDetails] subscription_proration_date: Optional[int] subtotal: int subtotal_excluding_tax: Optional[int] tax: Optional[int] test_clock: Optional[ExpandableField["TestClock"]] - threshold_reason: Optional[StripeObject] + threshold_reason: Optional[ThresholdReason] total: int - total_discount_amounts: Optional[List[StripeObject]] + total_discount_amounts: Optional[List[TotalDiscountAmount]] total_excluding_tax: Optional[int] - total_tax_amounts: List[StripeObject] - transfer_data: Optional[StripeObject] + total_tax_amounts: List[TotalTaxAmount] + transfer_data: Optional[TransferData] webhooks_delivered_at: Optional[int] @classmethod @@ -179,3 +724,26 @@ def list( ) return result + + _inner_class_types = { + "applies_to": AppliesTo, + "automatic_tax": AutomaticTax, + "custom_fields": CustomField, + "customer_address": CustomerAddress, + "customer_shipping": CustomerShipping, + "customer_tax_ids": CustomerTaxId, + "from_invoice": FromInvoice, + "issuer": Issuer, + "last_finalization_error": LastFinalizationError, + "payment_settings": PaymentSettings, + "rendering": Rendering, + "rendering_options": RenderingOptions, + "shipping_cost": ShippingCost, + "shipping_details": ShippingDetails, + "status_transitions": StatusTransitions, + "subscription_details": SubscriptionDetails, + "threshold_reason": ThresholdReason, + "total_discount_amounts": TotalDiscountAmount, + "total_tax_amounts": TotalTaxAmount, + "transfer_data": TransferData, + } diff --git a/stripe/api_resources/quote_preview_subscription_schedule.py b/stripe/api_resources/quote_preview_subscription_schedule.py index 629d9bbd7..117c9b581 100644 --- a/stripe/api_resources/quote_preview_subscription_schedule.py +++ b/stripe/api_resources/quote_preview_subscription_schedule.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject @@ -12,9 +10,17 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.account import Account from stripe.api_resources.application import Application + from stripe.api_resources.coupon import Coupon from stripe.api_resources.customer import Customer + from stripe.api_resources.discount import Discount as DiscountResource + from stripe.api_resources.invoice import Invoice + from stripe.api_resources.payment_method import PaymentMethod + from stripe.api_resources.plan import Plan + from stripe.api_resources.price import Price from stripe.api_resources.subscription import Subscription + from stripe.api_resources.tax_rate import TaxRate from stripe.api_resources.test_helpers.test_clock import TestClock @@ -22,24 +28,222 @@ class QuotePreviewSubscriptionSchedule( ListableAPIResource["QuotePreviewSubscriptionSchedule"], ): OBJECT_NAME = "quote_preview_subscription_schedule" + + class AppliesTo(StripeObject): + new_reference: Optional[str] + subscription_schedule: Optional[str] + type: Literal["new_reference", "subscription_schedule"] + + class CurrentPhase(StripeObject): + end_date: int + start_date: int + + class DefaultSettings(StripeObject): + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + _inner_class_types = {"liability": Liability} + + class BillingThresholds(StripeObject): + amount_gte: Optional[int] + reset_billing_cycle_anchor: Optional[bool] + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + days_until_due: Optional[int] + issuer: Optional[Issuer] + _inner_class_types = {"issuer": Issuer} + + class TransferData(StripeObject): + amount_percent: Optional[float] + destination: ExpandableField["Account"] + + application_fee_percent: Optional[float] + automatic_tax: Optional[AutomaticTax] + billing_cycle_anchor: Literal["automatic", "phase_start"] + billing_thresholds: Optional[BillingThresholds] + collection_method: Optional[ + Literal["charge_automatically", "send_invoice"] + ] + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + description: Optional[str] + invoice_settings: Optional[InvoiceSettings] + on_behalf_of: Optional[ExpandableField["Account"]] + transfer_data: Optional[TransferData] + _inner_class_types = { + "automatic_tax": AutomaticTax, + "billing_thresholds": BillingThresholds, + "invoice_settings": InvoiceSettings, + "transfer_data": TransferData, + } + + class Phase(StripeObject): + class AddInvoiceItem(StripeObject): + class Discount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + discounts: Optional[List[Discount]] + price: ExpandableField["Price"] + quantity: Optional[int] + tax_rates: Optional[List["TaxRate"]] + _inner_class_types = {"discounts": Discount} + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + _inner_class_types = {"liability": Liability} + + class BillingThresholds(StripeObject): + amount_gte: Optional[int] + reset_billing_cycle_anchor: Optional[bool] + + class Discount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + days_until_due: Optional[int] + issuer: Optional[Issuer] + _inner_class_types = {"issuer": Issuer} + + class Item(StripeObject): + class BillingThresholds(StripeObject): + usage_gte: Optional[int] + + class Discount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + class Trial(StripeObject): + converts_to: Optional[List[str]] + type: Literal["free", "paid"] + + billing_thresholds: Optional[BillingThresholds] + discounts: Optional[List[Discount]] + metadata: Optional[Dict[str, str]] + plan: ExpandableField["Plan"] + price: ExpandableField["Price"] + quantity: Optional[int] + tax_rates: Optional[List["TaxRate"]] + trial: Optional[Trial] + _inner_class_types = { + "billing_thresholds": BillingThresholds, + "discounts": Discount, + "trial": Trial, + } + + class PauseCollection(StripeObject): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + + class TransferData(StripeObject): + amount_percent: Optional[float] + destination: ExpandableField["Account"] + + class TrialSettings(StripeObject): + class EndBehavior(StripeObject): + prorate_up_front: Optional[Literal["defer", "include"]] + + end_behavior: Optional[EndBehavior] + _inner_class_types = {"end_behavior": EndBehavior} + + add_invoice_items: List[AddInvoiceItem] + application_fee_percent: Optional[float] + automatic_tax: Optional[AutomaticTax] + billing_cycle_anchor: Optional[Literal["automatic", "phase_start"]] + billing_thresholds: Optional[BillingThresholds] + collection_method: Optional[ + Literal["charge_automatically", "send_invoice"] + ] + coupon: Optional[ExpandableField["Coupon"]] + currency: str + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + default_tax_rates: Optional[List["TaxRate"]] + description: Optional[str] + discounts: Optional[List[Discount]] + end_date: int + invoice_settings: Optional[InvoiceSettings] + items: List[Item] + metadata: Optional[Dict[str, str]] + on_behalf_of: Optional[ExpandableField["Account"]] + pause_collection: Optional[PauseCollection] + proration_behavior: Literal[ + "always_invoice", "create_prorations", "none" + ] + start_date: int + transfer_data: Optional[TransferData] + trial_continuation: Optional[Literal["continue", "none"]] + trial_end: Optional[int] + trial_settings: Optional[TrialSettings] + _inner_class_types = { + "add_invoice_items": AddInvoiceItem, + "automatic_tax": AutomaticTax, + "billing_thresholds": BillingThresholds, + "discounts": Discount, + "invoice_settings": InvoiceSettings, + "items": Item, + "pause_collection": PauseCollection, + "transfer_data": TransferData, + "trial_settings": TrialSettings, + } + + class Prebilling(StripeObject): + invoice: ExpandableField["Invoice"] + period_end: int + period_start: int + update_behavior: Optional[Literal["prebill", "reset"]] + application: Optional[ExpandableField["Application"]] - applies_to: StripeObject + applies_to: AppliesTo billing_behavior: Optional[ Literal["prorate_on_next_phase", "prorate_up_front"] ] canceled_at: Optional[int] completed_at: Optional[int] created: int - current_phase: Optional[StripeObject] + current_phase: Optional[CurrentPhase] customer: ExpandableField["Customer"] - default_settings: StripeObject + default_settings: DefaultSettings end_behavior: Literal["cancel", "none", "release", "renew"] id: str livemode: bool metadata: Optional[Dict[str, str]] object: Literal["quote_preview_subscription_schedule"] - phases: List[StripeObject] - prebilling: Optional[StripeObject] + phases: List[Phase] + prebilling: Optional[Prebilling] released_at: Optional[int] released_subscription: Optional[str] status: Literal[ @@ -72,3 +276,11 @@ def list( ) return result + + _inner_class_types = { + "applies_to": AppliesTo, + "current_phase": CurrentPhase, + "default_settings": DefaultSettings, + "phases": Phase, + "prebilling": Prebilling, + } diff --git a/stripe/api_resources/refund.py b/stripe/api_resources/refund.py index 0a845948b..57d3471cf 100644 --- a/stripe/api_resources/refund.py +++ b/stripe/api_resources/refund.py @@ -37,6 +37,21 @@ class Refund( """ OBJECT_NAME = "refund" + + class NextAction(StripeObject): + class DisplayDetails(StripeObject): + class EmailSent(StripeObject): + email_sent_at: int + email_sent_to: str + + email_sent: EmailSent + expires_at: int + _inner_class_types = {"email_sent": EmailSent} + + display_details: Optional[DisplayDetails] + type: str + _inner_class_types = {"display_details": DisplayDetails} + amount: int balance_transaction: Optional[ExpandableField["BalanceTransaction"]] charge: Optional[ExpandableField["Charge"]] @@ -50,7 +65,7 @@ class Refund( id: str instructions_email: Optional[str] metadata: Optional[Dict[str, str]] - next_action: Optional[StripeObject] + next_action: Optional[NextAction] object: Literal["refund"] payment_intent: Optional[ExpandableField["PaymentIntent"]] reason: Optional[ @@ -198,5 +213,7 @@ def expire(self, idempotency_key: Optional[str] = None, **params: Any): def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = {"next_action": NextAction} + Refund.TestHelpers._resource_cls = Refund diff --git a/stripe/api_resources/reporting/report_run.py b/stripe/api_resources/reporting/report_run.py index c7c54bd07..35199a4bb 100644 --- a/stripe/api_resources/reporting/report_run.py +++ b/stripe/api_resources/reporting/report_run.py @@ -6,7 +6,7 @@ ) from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Optional, cast +from typing import Any, List, Optional, cast from typing_extensions import Literal from typing_extensions import TYPE_CHECKING @@ -31,12 +31,23 @@ class ReportRun( """ OBJECT_NAME = "reporting.report_run" + + class Parameters(StripeObject): + columns: Optional[List[str]] + connected_account: Optional[str] + currency: Optional[str] + interval_end: Optional[int] + interval_start: Optional[int] + payout: Optional[str] + reporting_category: Optional[str] + timezone: Optional[str] + created: int error: Optional[str] id: str livemode: bool object: Literal["reporting.report_run"] - parameters: StripeObject + parameters: Parameters report_type: str result: Optional["File"] status: str @@ -96,3 +107,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"parameters": Parameters} diff --git a/stripe/api_resources/review.py b/stripe/api_resources/review.py index e32b703b2..9b4514bee 100644 --- a/stripe/api_resources/review.py +++ b/stripe/api_resources/review.py @@ -24,6 +24,20 @@ class Review(ListableAPIResource["Review"]): """ OBJECT_NAME = "review" + + class IpAddressLocation(StripeObject): + city: Optional[str] + country: Optional[str] + latitude: Optional[float] + longitude: Optional[float] + region: Optional[str] + + class Session(StripeObject): + browser: Optional[str] + device: Optional[str] + platform: Optional[str] + version: Optional[str] + billing_zip: Optional[str] charge: Optional[ExpandableField["Charge"]] closed_reason: Optional[ @@ -34,14 +48,14 @@ class Review(ListableAPIResource["Review"]): created: int id: str ip_address: Optional[str] - ip_address_location: Optional[StripeObject] + ip_address_location: Optional[IpAddressLocation] livemode: bool object: Literal["review"] open: bool opened_reason: Literal["manual", "rule"] payment_intent: Optional[ExpandableField["PaymentIntent"]] reason: str - session: Optional[StripeObject] + session: Optional[Session] @classmethod def _cls_approve( @@ -106,3 +120,8 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "ip_address_location": IpAddressLocation, + "session": Session, + } diff --git a/stripe/api_resources/setup_attempt.py b/stripe/api_resources/setup_attempt.py index f7a9c5b86..a66c51956 100644 --- a/stripe/api_resources/setup_attempt.py +++ b/stripe/api_resources/setup_attempt.py @@ -13,6 +13,8 @@ from stripe.api_resources.account import Account from stripe.api_resources.application import Application from stripe.api_resources.customer import Customer + from stripe.api_resources.mandate import Mandate + from stripe.api_resources.payment_intent import PaymentIntent from stripe.api_resources.payment_method import PaymentMethod from stripe.api_resources.setup_intent import SetupIntent @@ -26,6 +28,392 @@ class SetupAttempt(ListableAPIResource["SetupAttempt"]): """ OBJECT_NAME = "setup_attempt" + + class PaymentMethodDetails(StripeObject): + class AcssDebit(StripeObject): + pass + + class AuBecsDebit(StripeObject): + pass + + class BacsDebit(StripeObject): + pass + + class Bancontact(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + iban_last4: Optional[str] + preferred_language: Optional[Literal["de", "en", "fr", "nl"]] + verified_name: Optional[str] + + class Boleto(StripeObject): + pass + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[str] + address_postal_code_check: Optional[str] + cvc_check: Optional[str] + + class ThreeDSecure(StripeObject): + authentication_flow: Optional[ + Literal["challenge", "frictionless"] + ] + result: Optional[ + Literal[ + "attempt_acknowledged", + "authenticated", + "exempted", + "failed", + "not_supported", + "processing_error", + ] + ] + result_reason: Optional[ + Literal[ + "abandoned", + "bypassed", + "canceled", + "card_not_enrolled", + "network_not_supported", + "protocol_error", + "rejected", + ] + ] + version: Optional[Literal["1.0.2", "2.1.0", "2.2.0"]] + + class Wallet(StripeObject): + class ApplePay(StripeObject): + pass + + class GooglePay(StripeObject): + pass + + apple_pay: Optional[ApplePay] + google_pay: Optional[GooglePay] + type: Literal["apple_pay", "google_pay", "link"] + _inner_class_types = { + "apple_pay": ApplePay, + "google_pay": GooglePay, + } + + brand: Optional[str] + checks: Optional[Checks] + country: Optional[str] + description: Optional[str] + exp_month: Optional[int] + exp_year: Optional[int] + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + network: Optional[str] + three_d_secure: Optional[ThreeDSecure] + wallet: Optional[Wallet] + _inner_class_types = { + "checks": Checks, + "three_d_secure": ThreeDSecure, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + generated_card: Optional[ExpandableField["PaymentMethod"]] + + class Cashapp(StripeObject): + pass + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + iban_last4: Optional[str] + verified_name: Optional[str] + + class Klarna(StripeObject): + pass + + class Link(StripeObject): + pass + + class Paypal(StripeObject): + pass + + class SepaDebit(StripeObject): + pass + + class Sofort(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + iban_last4: Optional[str] + preferred_language: Optional[Literal["de", "en", "fr", "nl"]] + verified_name: Optional[str] + + class UsBankAccount(StripeObject): + pass + + acss_debit: Optional[AcssDebit] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + ideal: Optional[Ideal] + klarna: Optional[Klarna] + link: Optional[Link] + paypal: Optional[Paypal] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + type: str + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "ideal": Ideal, + "klarna": Klarna, + "link": Link, + "paypal": Paypal, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "us_bank_account": UsBankAccount, + } + + class SetupError(StripeObject): + charge: Optional[str] + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "debit_not_authorized", + "email_invalid", + "expired_card", + "gift_card_balance_insufficient", + "gift_card_code_exists", + "gift_card_inactive", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sensitive_data_access_expired", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + decline_code: Optional[str] + doc_url: Optional[str] + message: Optional[str] + param: Optional[str] + payment_intent: Optional["PaymentIntent"] + payment_method: Optional["PaymentMethod"] + payment_method_type: Optional[str] + request_log_url: Optional[str] + setup_intent: Optional["SetupIntent"] + source: Optional[Any] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + application: Optional[ExpandableField["Application"]] attach_to_self: Optional[bool] created: int @@ -36,8 +424,8 @@ class SetupAttempt(ListableAPIResource["SetupAttempt"]): object: Literal["setup_attempt"] on_behalf_of: Optional[ExpandableField["Account"]] payment_method: ExpandableField["PaymentMethod"] - payment_method_details: StripeObject - setup_error: Optional[StripeObject] + payment_method_details: PaymentMethodDetails + setup_error: Optional[SetupError] setup_intent: ExpandableField["SetupIntent"] status: str usage: str @@ -66,3 +454,8 @@ def list( ) return result + + _inner_class_types = { + "payment_method_details": PaymentMethodDetails, + "setup_error": SetupError, + } diff --git a/stripe/api_resources/setup_intent.py b/stripe/api_resources/setup_intent.py index 231897fc2..248f98897 100644 --- a/stripe/api_resources/setup_intent.py +++ b/stripe/api_resources/setup_intent.py @@ -20,6 +20,7 @@ from stripe.api_resources.application import Application from stripe.api_resources.customer import Customer from stripe.api_resources.mandate import Mandate + from stripe.api_resources.payment_intent import PaymentIntent from stripe.api_resources.payment_method import PaymentMethod from stripe.api_resources.setup_attempt import SetupAttempt @@ -54,9 +55,354 @@ class SetupIntent( """ OBJECT_NAME = "setup_intent" + + class AutomaticPaymentMethods(StripeObject): + allow_redirects: Optional[Literal["always", "never"]] + enabled: Optional[bool] + + class LastSetupError(StripeObject): + charge: Optional[str] + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "debit_not_authorized", + "email_invalid", + "expired_card", + "gift_card_balance_insufficient", + "gift_card_code_exists", + "gift_card_inactive", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sensitive_data_access_expired", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + decline_code: Optional[str] + doc_url: Optional[str] + message: Optional[str] + param: Optional[str] + payment_intent: Optional["PaymentIntent"] + payment_method: Optional["PaymentMethod"] + payment_method_type: Optional[str] + request_log_url: Optional[str] + setup_intent: Optional["SetupIntent"] + source: Optional[Any] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + + class NextAction(StripeObject): + class CashappHandleRedirectOrDisplayQrCode(StripeObject): + class QrCode(StripeObject): + expires_at: int + image_url_png: str + image_url_svg: str + + hosted_instructions_url: str + mobile_auth_url: str + qr_code: QrCode + _inner_class_types = {"qr_code": QrCode} + + class RedirectToUrl(StripeObject): + return_url: Optional[str] + url: Optional[str] + + class VerifyWithMicrodeposits(StripeObject): + arrival_date: int + hosted_verification_url: str + microdeposit_type: Optional[Literal["amounts", "descriptor_code"]] + + cashapp_handle_redirect_or_display_qr_code: Optional[ + CashappHandleRedirectOrDisplayQrCode + ] + redirect_to_url: Optional[RedirectToUrl] + type: str + use_stripe_sdk: Optional[Dict[str, Any]] + verify_with_microdeposits: Optional[VerifyWithMicrodeposits] + _inner_class_types = { + "cashapp_handle_redirect_or_display_qr_code": CashappHandleRedirectOrDisplayQrCode, + "redirect_to_url": RedirectToUrl, + "verify_with_microdeposits": VerifyWithMicrodeposits, + } + + class PaymentMethodConfigurationDetails(StripeObject): + id: str + parent: Optional[str] + + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + custom_mandate_url: Optional[str] + default_for: Optional[List[Literal["invoice", "subscription"]]] + interval_description: Optional[str] + payment_schedule: Optional[ + Literal["combined", "interval", "sporadic"] + ] + transaction_type: Optional[Literal["business", "personal"]] + + currency: Optional[Literal["cad", "usd"]] + mandate_options: Optional[MandateOptions] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Card(StripeObject): + class MandateOptions(StripeObject): + amount: int + amount_type: Literal["fixed", "maximum"] + currency: str + description: Optional[str] + end_date: Optional[int] + interval: Literal["day", "month", "sporadic", "week", "year"] + interval_count: Optional[int] + reference: str + start_date: int + supported_types: Optional[List[Literal["india"]]] + + mandate_options: Optional[MandateOptions] + network: Optional[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "interac", + "jcb", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + request_three_d_secure: Optional[ + Literal["any", "automatic", "challenge_only"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Link(StripeObject): + persistent_token: Optional[str] + + class Paypal(StripeObject): + billing_agreement_id: Optional[str] + currency: Optional[str] + + class SepaDebit(StripeObject): + class MandateOptions(StripeObject): + pass + + mandate_options: Optional[MandateOptions] + _inner_class_types = {"mandate_options": MandateOptions} + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + class ManualEntry(StripeObject): + mode: Optional[Literal["automatic", "custom"]] + + manual_entry: Optional[ManualEntry] + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + prefetch: Optional[ + List[ + Literal[ + "balances", + "inferred_balances", + "ownership", + "transactions", + ] + ] + ] + return_url: Optional[str] + _inner_class_types = {"manual_entry": ManualEntry} + + financial_connections: Optional[FinancialConnections] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = { + "financial_connections": FinancialConnections + } + + acss_debit: Optional[AcssDebit] + card: Optional[Card] + link: Optional[Link] + paypal: Optional[Paypal] + sepa_debit: Optional[SepaDebit] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "card": Card, + "link": Link, + "paypal": Paypal, + "sepa_debit": SepaDebit, + "us_bank_account": UsBankAccount, + } + application: Optional[ExpandableField["Application"]] attach_to_self: Optional[bool] - automatic_payment_methods: Optional[StripeObject] + automatic_payment_methods: Optional[AutomaticPaymentMethods] cancellation_reason: Optional[ Literal["abandoned", "duplicate", "requested_by_customer"] ] @@ -66,17 +412,19 @@ class SetupIntent( description: Optional[str] flow_directions: Optional[List[Literal["inbound", "outbound"]]] id: str - last_setup_error: Optional[StripeObject] + last_setup_error: Optional[LastSetupError] latest_attempt: Optional[ExpandableField["SetupAttempt"]] livemode: bool mandate: Optional[ExpandableField["Mandate"]] metadata: Optional[Dict[str, str]] - next_action: Optional[StripeObject] + next_action: Optional[NextAction] object: Literal["setup_intent"] on_behalf_of: Optional[ExpandableField["Account"]] payment_method: Optional[ExpandableField["PaymentMethod"]] - payment_method_configuration_details: Optional[StripeObject] - payment_method_options: Optional[StripeObject] + payment_method_configuration_details: Optional[ + PaymentMethodConfigurationDetails + ] + payment_method_options: Optional[PaymentMethodOptions] payment_method_types: List[str] single_use_mandate: Optional[ExpandableField["Mandate"]] status: Literal[ @@ -246,3 +594,11 @@ def verify_microdeposits( idempotency_key=idempotency_key, params=params, ) + + _inner_class_types = { + "automatic_payment_methods": AutomaticPaymentMethods, + "last_setup_error": LastSetupError, + "next_action": NextAction, + "payment_method_configuration_details": PaymentMethodConfigurationDetails, + "payment_method_options": PaymentMethodOptions, + } diff --git a/stripe/api_resources/shipping_rate.py b/stripe/api_resources/shipping_rate.py index 73bf6e164..4d376f57d 100644 --- a/stripe/api_resources/shipping_rate.py +++ b/stripe/api_resources/shipping_rate.py @@ -29,11 +29,36 @@ class ShippingRate( """ OBJECT_NAME = "shipping_rate" + + class DeliveryEstimate(StripeObject): + class Maximum(StripeObject): + unit: Literal["business_day", "day", "hour", "month", "week"] + value: int + + class Minimum(StripeObject): + unit: Literal["business_day", "day", "hour", "month", "week"] + value: int + + maximum: Optional[Maximum] + minimum: Optional[Minimum] + _inner_class_types = {"maximum": Maximum, "minimum": Minimum} + + class FixedAmount(StripeObject): + class CurrencyOptions(StripeObject): + amount: int + tax_behavior: Literal["exclusive", "inclusive", "unspecified"] + + amount: int + currency: str + currency_options: Optional[Dict[str, CurrencyOptions]] + _inner_class_types = {"currency_options": CurrencyOptions} + _inner_class_dicts = ["currency_options"] + active: bool created: int - delivery_estimate: Optional[StripeObject] + delivery_estimate: Optional[DeliveryEstimate] display_name: Optional[str] - fixed_amount: Optional[StripeObject] + fixed_amount: Optional[FixedAmount] id: str livemode: bool metadata: Dict[str, str] @@ -104,3 +129,8 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "delivery_estimate": DeliveryEstimate, + "fixed_amount": FixedAmount, + } diff --git a/stripe/api_resources/sigma/scheduled_query_run.py b/stripe/api_resources/sigma/scheduled_query_run.py index fe208a5dc..ba0e52c61 100644 --- a/stripe/api_resources/sigma/scheduled_query_run.py +++ b/stripe/api_resources/sigma/scheduled_query_run.py @@ -21,9 +21,13 @@ class ScheduledQueryRun(ListableAPIResource["ScheduledQueryRun"]): """ OBJECT_NAME = "scheduled_query_run" + + class Error(StripeObject): + message: str + created: int data_load_time: int - error: Optional[StripeObject] + error: Optional[Error] file: Optional["File"] id: str livemode: bool @@ -69,3 +73,5 @@ def retrieve( @classmethod def class_url(cls): return "/v1/sigma/scheduled_query_runs" + + _inner_class_types = {"error": Error} diff --git a/stripe/api_resources/source.py b/stripe/api_resources/source.py index 30ffc1ffe..278c2e5dd 100644 --- a/stripe/api_resources/source.py +++ b/stripe/api_resources/source.py @@ -7,7 +7,7 @@ UpdateableAPIResource, ) from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus @@ -27,42 +27,346 @@ class Source(CreateableAPIResource["Source"], UpdateableAPIResource["Source"]): """ OBJECT_NAME = "source" - ach_credit_transfer: Optional[StripeObject] - ach_debit: Optional[StripeObject] - acss_debit: Optional[StripeObject] - alipay: Optional[StripeObject] + + class AchCreditTransfer(StripeObject): + account_number: Optional[str] + bank_name: Optional[str] + fingerprint: Optional[str] + refund_account_holder_name: Optional[str] + refund_account_holder_type: Optional[str] + refund_routing_number: Optional[str] + routing_number: Optional[str] + swift_code: Optional[str] + + class AchDebit(StripeObject): + bank_name: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + type: Optional[str] + + class AcssDebit(StripeObject): + bank_address_city: Optional[str] + bank_address_line_1: Optional[str] + bank_address_line_2: Optional[str] + bank_address_postal_code: Optional[str] + bank_name: Optional[str] + category: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + + class Alipay(StripeObject): + data_string: Optional[str] + native_url: Optional[str] + statement_descriptor: Optional[str] + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + + class Bancontact(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + iban_last4: Optional[str] + preferred_language: Optional[str] + statement_descriptor: Optional[str] + + class Card(StripeObject): + address_line1_check: Optional[str] + address_zip_check: Optional[str] + brand: Optional[str] + country: Optional[str] + cvc_check: Optional[str] + description: Optional[str] + dynamic_last4: Optional[str] + exp_month: Optional[int] + exp_year: Optional[int] + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + name: Optional[str] + three_d_secure: Optional[str] + tokenization_method: Optional[str] + + class CardPresent(StripeObject): + application_cryptogram: Optional[str] + application_preferred_name: Optional[str] + authorization_code: Optional[str] + authorization_response_code: Optional[str] + brand: Optional[str] + country: Optional[str] + cvm_type: Optional[str] + data_type: Optional[str] + dedicated_file_name: Optional[str] + description: Optional[str] + emv_auth_data: Optional[str] + evidence_customer_signature: Optional[str] + evidence_transaction_certificate: Optional[str] + exp_month: Optional[int] + exp_year: Optional[int] + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + pos_device_id: Optional[str] + pos_entry_mode: Optional[str] + read_method: Optional[str] + reader: Optional[str] + terminal_verification_results: Optional[str] + transaction_status_information: Optional[str] + + class CodeVerification(StripeObject): + attempts_remaining: int + status: str + + class Eps(StripeObject): + reference: Optional[str] + statement_descriptor: Optional[str] + + class Giropay(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + statement_descriptor: Optional[str] + + class Ideal(StripeObject): + bank: Optional[str] + bic: Optional[str] + iban_last4: Optional[str] + statement_descriptor: Optional[str] + + class Klarna(StripeObject): + background_image_url: Optional[str] + client_token: Optional[str] + first_name: Optional[str] + last_name: Optional[str] + locale: Optional[str] + logo_url: Optional[str] + page_title: Optional[str] + pay_later_asset_urls_descriptive: Optional[str] + pay_later_asset_urls_standard: Optional[str] + pay_later_name: Optional[str] + pay_later_redirect_url: Optional[str] + pay_now_asset_urls_descriptive: Optional[str] + pay_now_asset_urls_standard: Optional[str] + pay_now_name: Optional[str] + pay_now_redirect_url: Optional[str] + pay_over_time_asset_urls_descriptive: Optional[str] + pay_over_time_asset_urls_standard: Optional[str] + pay_over_time_name: Optional[str] + pay_over_time_redirect_url: Optional[str] + payment_method_categories: Optional[str] + purchase_country: Optional[str] + purchase_type: Optional[str] + redirect_url: Optional[str] + shipping_delay: Optional[int] + shipping_first_name: Optional[str] + shipping_last_name: Optional[str] + + class Multibanco(StripeObject): + entity: Optional[str] + reference: Optional[str] + refund_account_holder_address_city: Optional[str] + refund_account_holder_address_country: Optional[str] + refund_account_holder_address_line1: Optional[str] + refund_account_holder_address_line2: Optional[str] + refund_account_holder_address_postal_code: Optional[str] + refund_account_holder_address_state: Optional[str] + refund_account_holder_name: Optional[str] + refund_iban: Optional[str] + + class Owner(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class VerifiedAddress(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + email: Optional[str] + name: Optional[str] + phone: Optional[str] + verified_address: Optional[VerifiedAddress] + verified_email: Optional[str] + verified_name: Optional[str] + verified_phone: Optional[str] + _inner_class_types = { + "address": Address, + "verified_address": VerifiedAddress, + } + + class P24(StripeObject): + reference: Optional[str] + + class Paypal(StripeObject): + billing_agreement: Optional[str] + fingerprint: Optional[str] + payer_id: Optional[str] + reference_id: Optional[str] + reference_transaction_amount: Optional[str] + reference_transaction_charged: Optional[bool] + statement_descriptor: Optional[str] + transaction_id: Optional[str] + verified_email: Optional[str] + + class Receiver(StripeObject): + address: Optional[str] + amount_charged: int + amount_received: int + amount_returned: int + refund_attributes_method: str + refund_attributes_status: str + + class Redirect(StripeObject): + failure_reason: Optional[str] + return_url: str + status: str + url: str + + class SepaCreditTransfer(StripeObject): + bank_name: Optional[str] + bic: Optional[str] + iban: Optional[str] + refund_account_holder_address_city: Optional[str] + refund_account_holder_address_country: Optional[str] + refund_account_holder_address_line1: Optional[str] + refund_account_holder_address_line2: Optional[str] + refund_account_holder_address_postal_code: Optional[str] + refund_account_holder_address_state: Optional[str] + refund_account_holder_name: Optional[str] + refund_iban: Optional[str] + + class SepaDebit(StripeObject): + bank_code: Optional[str] + branch_code: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + mandate_reference: Optional[str] + mandate_url: Optional[str] + + class Sofort(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + country: Optional[str] + iban_last4: Optional[str] + preferred_language: Optional[str] + statement_descriptor: Optional[str] + + class SourceOrder(StripeObject): + class Item(StripeObject): + amount: Optional[int] + currency: Optional[str] + description: Optional[str] + parent: Optional[str] + quantity: Optional[int] + type: Optional[str] + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Optional[Address] + carrier: Optional[str] + name: Optional[str] + phone: Optional[str] + tracking_number: Optional[str] + _inner_class_types = {"address": Address} + + amount: int + currency: str + email: Optional[str] + items: Optional[List[Item]] + shipping: Optional[Shipping] + _inner_class_types = {"items": Item, "shipping": Shipping} + + class ThreeDSecure(StripeObject): + address_line1_check: Optional[str] + address_zip_check: Optional[str] + authenticated: Optional[bool] + brand: Optional[str] + card: Optional[str] + country: Optional[str] + customer: Optional[str] + cvc_check: Optional[str] + description: Optional[str] + dynamic_last4: Optional[str] + exp_month: Optional[int] + exp_year: Optional[int] + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + name: Optional[str] + three_d_secure: Optional[str] + tokenization_method: Optional[str] + + class Wechat(StripeObject): + prepay_id: Optional[str] + qr_code_url: Optional[str] + statement_descriptor: Optional[str] + + ach_credit_transfer: Optional[AchCreditTransfer] + ach_debit: Optional[AchDebit] + acss_debit: Optional[AcssDebit] + alipay: Optional[Alipay] amount: Optional[int] - au_becs_debit: Optional[StripeObject] - bancontact: Optional[StripeObject] - card: Optional[StripeObject] - card_present: Optional[StripeObject] + au_becs_debit: Optional[AuBecsDebit] + bancontact: Optional[Bancontact] + card: Optional[Card] + card_present: Optional[CardPresent] client_secret: str - code_verification: Optional[StripeObject] + code_verification: Optional[CodeVerification] created: int currency: Optional[str] customer: Optional[str] - eps: Optional[StripeObject] + eps: Optional[Eps] flow: str - giropay: Optional[StripeObject] + giropay: Optional[Giropay] id: str - ideal: Optional[StripeObject] - klarna: Optional[StripeObject] + ideal: Optional[Ideal] + klarna: Optional[Klarna] livemode: bool metadata: Optional[Dict[str, str]] - multibanco: Optional[StripeObject] + multibanco: Optional[Multibanco] object: Literal["source"] - owner: Optional[StripeObject] - p24: Optional[StripeObject] - paypal: Optional[StripeObject] - receiver: Optional[StripeObject] - redirect: Optional[StripeObject] - sepa_credit_transfer: Optional[StripeObject] - sepa_debit: Optional[StripeObject] - sofort: Optional[StripeObject] - source_order: Optional[StripeObject] + owner: Optional[Owner] + p24: Optional[P24] + paypal: Optional[Paypal] + receiver: Optional[Receiver] + redirect: Optional[Redirect] + sepa_credit_transfer: Optional[SepaCreditTransfer] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + source_order: Optional[SourceOrder] statement_descriptor: Optional[str] status: str - three_d_secure: Optional[StripeObject] + three_d_secure: Optional[ThreeDSecure] type: Literal[ "ach_credit_transfer", "ach_debit", @@ -86,7 +390,7 @@ class Source(CreateableAPIResource["Source"], UpdateableAPIResource["Source"]): "wechat", ] usage: Optional[str] - wechat: Optional[StripeObject] + wechat: Optional[Wechat] @classmethod def create( @@ -210,3 +514,31 @@ def detach(self, idempotency_key=None, **params): "to a customer object." % token, "id", ) + + _inner_class_types = { + "ach_credit_transfer": AchCreditTransfer, + "ach_debit": AchDebit, + "acss_debit": AcssDebit, + "alipay": Alipay, + "au_becs_debit": AuBecsDebit, + "bancontact": Bancontact, + "card": Card, + "card_present": CardPresent, + "code_verification": CodeVerification, + "eps": Eps, + "giropay": Giropay, + "ideal": Ideal, + "klarna": Klarna, + "multibanco": Multibanco, + "owner": Owner, + "p24": P24, + "paypal": Paypal, + "receiver": Receiver, + "redirect": Redirect, + "sepa_credit_transfer": SepaCreditTransfer, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "source_order": SourceOrder, + "three_d_secure": ThreeDSecure, + "wechat": Wechat, + } diff --git a/stripe/api_resources/source_mandate_notification.py b/stripe/api_resources/source_mandate_notification.py index 9d1a9ab81..485fd835d 100644 --- a/stripe/api_resources/source_mandate_notification.py +++ b/stripe/api_resources/source_mandate_notification.py @@ -18,15 +18,33 @@ class SourceMandateNotification(StripeObject): """ OBJECT_NAME = "source_mandate_notification" - acss_debit: Optional[StripeObject] + + class AcssDebit(StripeObject): + statement_descriptor: Optional[str] + + class BacsDebit(StripeObject): + last4: Optional[str] + + class SepaDebit(StripeObject): + creditor_identifier: Optional[str] + last4: Optional[str] + mandate_reference: Optional[str] + + acss_debit: Optional[AcssDebit] amount: Optional[int] - bacs_debit: Optional[StripeObject] + bacs_debit: Optional[BacsDebit] created: int id: str livemode: bool object: Literal["source_mandate_notification"] reason: str - sepa_debit: Optional[StripeObject] + sepa_debit: Optional[SepaDebit] source: "Source" status: str type: str + + _inner_class_types = { + "acss_debit": AcssDebit, + "bacs_debit": BacsDebit, + "sepa_debit": SepaDebit, + } diff --git a/stripe/api_resources/source_transaction.py b/stripe/api_resources/source_transaction.py index 10d8cf6d9..1f654efed 100644 --- a/stripe/api_resources/source_transaction.py +++ b/stripe/api_resources/source_transaction.py @@ -14,17 +14,49 @@ class SourceTransaction(StripeObject): """ OBJECT_NAME = "source_transaction" - ach_credit_transfer: Optional[StripeObject] + + class AchCreditTransfer(StripeObject): + customer_data: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + + class ChfCreditTransfer(StripeObject): + reference: Optional[str] + sender_address_country: Optional[str] + sender_address_line1: Optional[str] + sender_iban: Optional[str] + sender_name: Optional[str] + + class GbpCreditTransfer(StripeObject): + fingerprint: Optional[str] + funding_method: Optional[str] + last4: Optional[str] + reference: Optional[str] + sender_account_number: Optional[str] + sender_name: Optional[str] + sender_sort_code: Optional[str] + + class PaperCheck(StripeObject): + available_at: Optional[str] + invoices: Optional[str] + + class SepaCreditTransfer(StripeObject): + reference: Optional[str] + sender_iban: Optional[str] + sender_name: Optional[str] + + ach_credit_transfer: Optional[AchCreditTransfer] amount: int - chf_credit_transfer: Optional[StripeObject] + chf_credit_transfer: Optional[ChfCreditTransfer] created: int currency: str - gbp_credit_transfer: Optional[StripeObject] + gbp_credit_transfer: Optional[GbpCreditTransfer] id: str livemode: bool object: Literal["source_transaction"] - paper_check: Optional[StripeObject] - sepa_credit_transfer: Optional[StripeObject] + paper_check: Optional[PaperCheck] + sepa_credit_transfer: Optional[SepaCreditTransfer] source: str status: str type: Literal[ @@ -45,3 +77,11 @@ class SourceTransaction(StripeObject): "three_d_secure", "wechat", ] + + _inner_class_types = { + "ach_credit_transfer": AchCreditTransfer, + "chf_credit_transfer": ChfCreditTransfer, + "gbp_credit_transfer": GbpCreditTransfer, + "paper_check": PaperCheck, + "sepa_credit_transfer": SepaCreditTransfer, + } diff --git a/stripe/api_resources/subscription.py b/stripe/api_resources/subscription.py index dd6e72733..7ae80259c 100644 --- a/stripe/api_resources/subscription.py +++ b/stripe/api_resources/subscription.py @@ -46,15 +46,222 @@ class Subscription( """ OBJECT_NAME = "subscription" + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + _inner_class_types = {"liability": Liability} + + class BillingThresholds(StripeObject): + amount_gte: Optional[int] + reset_billing_cycle_anchor: Optional[bool] + + class CancellationDetails(StripeObject): + comment: Optional[str] + feedback: Optional[ + Literal[ + "customer_service", + "low_quality", + "missing_features", + "other", + "switched_service", + "too_complex", + "too_expensive", + "unused", + ] + ] + reason: Optional[ + Literal[ + "cancellation_requested", "payment_disputed", "payment_failed" + ] + ] + + class PauseCollection(StripeObject): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + resumes_at: Optional[int] + + class PaymentSettings(StripeObject): + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + transaction_type: Optional[Literal["business", "personal"]] + + mandate_options: Optional[MandateOptions] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = {"mandate_options": MandateOptions} + + class Bancontact(StripeObject): + preferred_language: Literal["de", "en", "fr", "nl"] + + class Card(StripeObject): + class MandateOptions(StripeObject): + amount: Optional[int] + amount_type: Optional[Literal["fixed", "maximum"]] + description: Optional[str] + + mandate_options: Optional[MandateOptions] + network: Optional[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "interac", + "jcb", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + request_three_d_secure: Optional[Literal["any", "automatic"]] + _inner_class_types = {"mandate_options": MandateOptions} + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + + eu_bank_transfer: Optional[EuBankTransfer] + type: Optional[str] + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + _inner_class_types = {"bank_transfer": BankTransfer} + + class Konbini(StripeObject): + pass + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + prefetch: Optional[ + List[ + Literal[ + "balances", + "inferred_balances", + "ownership", + "transactions", + ] + ] + ] + + financial_connections: Optional[FinancialConnections] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + _inner_class_types = { + "financial_connections": FinancialConnections, + } + + acss_debit: Optional[AcssDebit] + bancontact: Optional[Bancontact] + card: Optional[Card] + customer_balance: Optional[CustomerBalance] + konbini: Optional[Konbini] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "bancontact": Bancontact, + "card": Card, + "customer_balance": CustomerBalance, + "konbini": Konbini, + "us_bank_account": UsBankAccount, + } + + payment_method_options: Optional[PaymentMethodOptions] + payment_method_types: Optional[ + List[ + Literal[ + "ach_credit_transfer", + "ach_debit", + "acss_debit", + "au_becs_debit", + "bacs_debit", + "bancontact", + "boleto", + "card", + "cashapp", + "customer_balance", + "fpx", + "giropay", + "grabpay", + "ideal", + "konbini", + "link", + "paynow", + "paypal", + "promptpay", + "sepa_credit_transfer", + "sepa_debit", + "sofort", + "us_bank_account", + "wechat_pay", + ] + ] + ] + save_default_payment_method: Optional[ + Literal["off", "on_subscription"] + ] + _inner_class_types = {"payment_method_options": PaymentMethodOptions} + + class PendingInvoiceItemInterval(StripeObject): + interval: Literal["day", "month", "week", "year"] + interval_count: int + + class PendingUpdate(StripeObject): + billing_cycle_anchor: Optional[int] + expires_at: int + prebilling_iterations: Optional[int] + subscription_items: Optional[List["SubscriptionItem"]] + trial_end: Optional[int] + trial_from_plan: Optional[bool] + + class Prebilling(StripeObject): + invoice: ExpandableField["Invoice"] + period_end: int + period_start: int + update_behavior: Optional[Literal["prebill", "reset"]] + + class TransferData(StripeObject): + amount_percent: Optional[float] + destination: ExpandableField["Account"] + + class TrialSettings(StripeObject): + class EndBehavior(StripeObject): + missing_payment_method: Literal[ + "cancel", "create_invoice", "pause" + ] + + end_behavior: EndBehavior + _inner_class_types = {"end_behavior": EndBehavior} + application: Optional[ExpandableField["Application"]] application_fee_percent: Optional[float] - automatic_tax: StripeObject + automatic_tax: AutomaticTax billing_cycle_anchor: int - billing_thresholds: Optional[StripeObject] + billing_thresholds: Optional[BillingThresholds] cancel_at: Optional[int] cancel_at_period_end: bool canceled_at: Optional[int] - cancellation_details: Optional[StripeObject] + cancellation_details: Optional[CancellationDetails] collection_method: Literal["charge_automatically", "send_invoice"] created: int currency: str @@ -77,12 +284,12 @@ class Subscription( next_pending_invoice_item_invoice: Optional[int] object: Literal["subscription"] on_behalf_of: Optional[ExpandableField["Account"]] - pause_collection: Optional[StripeObject] - payment_settings: Optional[StripeObject] - pending_invoice_item_interval: Optional[StripeObject] + pause_collection: Optional[PauseCollection] + payment_settings: Optional[PaymentSettings] + pending_invoice_item_interval: Optional[PendingInvoiceItemInterval] pending_setup_intent: Optional[ExpandableField["SetupIntent"]] - pending_update: Optional[StripeObject] - prebilling: Optional[StripeObject] + pending_update: Optional[PendingUpdate] + prebilling: Optional[Prebilling] schedule: Optional[ExpandableField["SubscriptionSchedule"]] start_date: int status: Literal[ @@ -96,9 +303,9 @@ class Subscription( "unpaid", ] test_clock: Optional[ExpandableField["TestClock"]] - transfer_data: Optional[StripeObject] + transfer_data: Optional[TransferData] trial_end: Optional[int] - trial_settings: Optional[StripeObject] + trial_settings: Optional[TrialSettings] trial_start: Optional[int] @classmethod @@ -272,3 +479,16 @@ def search(cls, *args, **kwargs) -> SearchResultObject["Subscription"]: @classmethod def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() + + _inner_class_types = { + "automatic_tax": AutomaticTax, + "billing_thresholds": BillingThresholds, + "cancellation_details": CancellationDetails, + "pause_collection": PauseCollection, + "payment_settings": PaymentSettings, + "pending_invoice_item_interval": PendingInvoiceItemInterval, + "pending_update": PendingUpdate, + "prebilling": Prebilling, + "transfer_data": TransferData, + "trial_settings": TrialSettings, + } diff --git a/stripe/api_resources/subscription_item.py b/stripe/api_resources/subscription_item.py index 42945bdfc..a1ff77f52 100644 --- a/stripe/api_resources/subscription_item.py +++ b/stripe/api_resources/subscription_item.py @@ -38,7 +38,15 @@ class SubscriptionItem( """ OBJECT_NAME = "subscription_item" - billing_thresholds: Optional[StripeObject] + + class BillingThresholds(StripeObject): + usage_gte: Optional[int] + + class Trial(StripeObject): + converts_to: Optional[List[str]] + type: Literal["free", "paid"] + + billing_thresholds: Optional[BillingThresholds] created: int discounts: Optional[List[ExpandableField["Discount"]]] id: str @@ -49,7 +57,7 @@ class SubscriptionItem( quantity: Optional[int] subscription: str tax_rates: Optional[List["TaxRate"]] - trial: Optional[StripeObject] + trial: Optional[Trial] deleted: Optional[Literal[True]] @classmethod @@ -170,3 +178,8 @@ def list_usage_record_summaries( stripe_account=stripe_account, params=params, ) + + _inner_class_types = { + "billing_thresholds": BillingThresholds, + "trial": Trial, + } diff --git a/stripe/api_resources/subscription_schedule.py b/stripe/api_resources/subscription_schedule.py index dfb917a9c..f7ab972d6 100644 --- a/stripe/api_resources/subscription_schedule.py +++ b/stripe/api_resources/subscription_schedule.py @@ -16,9 +16,17 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.account import Account from stripe.api_resources.application import Application + from stripe.api_resources.coupon import Coupon from stripe.api_resources.customer import Customer + from stripe.api_resources.discount import Discount as DiscountResource + from stripe.api_resources.invoice import Invoice + from stripe.api_resources.payment_method import PaymentMethod + from stripe.api_resources.plan import Plan + from stripe.api_resources.price import Price from stripe.api_resources.subscription import Subscription + from stripe.api_resources.tax_rate import TaxRate from stripe.api_resources.test_helpers.test_clock import TestClock @@ -34,6 +42,199 @@ class SubscriptionSchedule( """ OBJECT_NAME = "subscription_schedule" + + class CurrentPhase(StripeObject): + end_date: int + start_date: int + + class DefaultSettings(StripeObject): + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + _inner_class_types = {"liability": Liability} + + class BillingThresholds(StripeObject): + amount_gte: Optional[int] + reset_billing_cycle_anchor: Optional[bool] + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + days_until_due: Optional[int] + issuer: Optional[Issuer] + _inner_class_types = {"issuer": Issuer} + + class TransferData(StripeObject): + amount_percent: Optional[float] + destination: ExpandableField["Account"] + + application_fee_percent: Optional[float] + automatic_tax: Optional[AutomaticTax] + billing_cycle_anchor: Literal["automatic", "phase_start"] + billing_thresholds: Optional[BillingThresholds] + collection_method: Optional[ + Literal["charge_automatically", "send_invoice"] + ] + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + description: Optional[str] + invoice_settings: Optional[InvoiceSettings] + on_behalf_of: Optional[ExpandableField["Account"]] + transfer_data: Optional[TransferData] + _inner_class_types = { + "automatic_tax": AutomaticTax, + "billing_thresholds": BillingThresholds, + "invoice_settings": InvoiceSettings, + "transfer_data": TransferData, + } + + class Phase(StripeObject): + class AddInvoiceItem(StripeObject): + class Discount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + discounts: Optional[List[Discount]] + price: ExpandableField["Price"] + quantity: Optional[int] + tax_rates: Optional[List["TaxRate"]] + _inner_class_types = {"discounts": Discount} + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + enabled: bool + liability: Optional[Liability] + _inner_class_types = {"liability": Liability} + + class BillingThresholds(StripeObject): + amount_gte: Optional[int] + reset_billing_cycle_anchor: Optional[bool] + + class Discount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account", "self"] + + days_until_due: Optional[int] + issuer: Optional[Issuer] + _inner_class_types = {"issuer": Issuer} + + class Item(StripeObject): + class BillingThresholds(StripeObject): + usage_gte: Optional[int] + + class Discount(StripeObject): + class DiscountEnd(StripeObject): + timestamp: Optional[int] + type: Literal["timestamp"] + + coupon: Optional[ExpandableField["Coupon"]] + discount: Optional[ExpandableField["DiscountResource"]] + discount_end: Optional[DiscountEnd] + _inner_class_types = {"discount_end": DiscountEnd} + + class Trial(StripeObject): + converts_to: Optional[List[str]] + type: Literal["free", "paid"] + + billing_thresholds: Optional[BillingThresholds] + discounts: Optional[List[Discount]] + metadata: Optional[Dict[str, str]] + plan: ExpandableField["Plan"] + price: ExpandableField["Price"] + quantity: Optional[int] + tax_rates: Optional[List["TaxRate"]] + trial: Optional[Trial] + _inner_class_types = { + "billing_thresholds": BillingThresholds, + "discounts": Discount, + "trial": Trial, + } + + class PauseCollection(StripeObject): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + + class TransferData(StripeObject): + amount_percent: Optional[float] + destination: ExpandableField["Account"] + + class TrialSettings(StripeObject): + class EndBehavior(StripeObject): + prorate_up_front: Optional[Literal["defer", "include"]] + + end_behavior: Optional[EndBehavior] + _inner_class_types = {"end_behavior": EndBehavior} + + add_invoice_items: List[AddInvoiceItem] + application_fee_percent: Optional[float] + automatic_tax: Optional[AutomaticTax] + billing_cycle_anchor: Optional[Literal["automatic", "phase_start"]] + billing_thresholds: Optional[BillingThresholds] + collection_method: Optional[ + Literal["charge_automatically", "send_invoice"] + ] + coupon: Optional[ExpandableField["Coupon"]] + currency: str + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + default_tax_rates: Optional[List["TaxRate"]] + description: Optional[str] + discounts: Optional[List[Discount]] + end_date: int + invoice_settings: Optional[InvoiceSettings] + items: List[Item] + metadata: Optional[Dict[str, str]] + on_behalf_of: Optional[ExpandableField["Account"]] + pause_collection: Optional[PauseCollection] + proration_behavior: Literal[ + "always_invoice", "create_prorations", "none" + ] + start_date: int + transfer_data: Optional[TransferData] + trial_continuation: Optional[Literal["continue", "none"]] + trial_end: Optional[int] + trial_settings: Optional[TrialSettings] + _inner_class_types = { + "add_invoice_items": AddInvoiceItem, + "automatic_tax": AutomaticTax, + "billing_thresholds": BillingThresholds, + "discounts": Discount, + "invoice_settings": InvoiceSettings, + "items": Item, + "pause_collection": PauseCollection, + "transfer_data": TransferData, + "trial_settings": TrialSettings, + } + + class Prebilling(StripeObject): + invoice: ExpandableField["Invoice"] + period_end: int + period_start: int + update_behavior: Optional[Literal["prebill", "reset"]] + application: Optional[ExpandableField["Application"]] billing_behavior: Optional[ Literal["prorate_on_next_phase", "prorate_up_front"] @@ -41,16 +242,16 @@ class SubscriptionSchedule( canceled_at: Optional[int] completed_at: Optional[int] created: int - current_phase: Optional[StripeObject] + current_phase: Optional[CurrentPhase] customer: ExpandableField["Customer"] - default_settings: StripeObject + default_settings: DefaultSettings end_behavior: Literal["cancel", "none", "release", "renew"] id: str livemode: bool metadata: Optional[Dict[str, str]] object: Literal["subscription_schedule"] - phases: List[StripeObject] - prebilling: Optional[StripeObject] + phases: List[Phase] + prebilling: Optional[Prebilling] released_at: Optional[int] released_subscription: Optional[str] status: Literal[ @@ -214,3 +415,10 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "current_phase": CurrentPhase, + "default_settings": DefaultSettings, + "phases": Phase, + "prebilling": Prebilling, + } diff --git a/stripe/api_resources/tax/calculation.py b/stripe/api_resources/tax/calculation.py index e6af88ca9..7e9b4112c 100644 --- a/stripe/api_resources/tax/calculation.py +++ b/stripe/api_resources/tax/calculation.py @@ -23,19 +23,218 @@ class Calculation(CreateableAPIResource["Calculation"]): """ OBJECT_NAME = "tax.calculation" + + class CustomerDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: str + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class TaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "ar_cuit", + "au_abn", + "au_arn", + "bg_uic", + "bo_tin", + "br_cnpj", + "br_cpf", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "ch_vat", + "cl_tin", + "cn_tin", + "co_nit", + "cr_tin", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "hk_br", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kr_brn", + "li_uid", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "no_vat", + "nz_gst", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sv_nit", + "th_vat", + "tr_tin", + "tw_vat", + "ua_vat", + "unknown", + "us_ein", + "uy_ruc", + "ve_rif", + "vn_tin", + "za_vat", + ] + value: str + + address: Optional[Address] + address_source: Optional[Literal["billing", "shipping"]] + ip_address: Optional[str] + tax_ids: List[TaxId] + taxability_override: Literal[ + "customer_exempt", "none", "reverse_charge" + ] + _inner_class_types = {"address": Address, "tax_ids": TaxId} + + class ShippingCost(StripeObject): + class TaxBreakdown(StripeObject): + class Jurisdiction(StripeObject): + country: str + display_name: str + level: Literal[ + "city", "country", "county", "district", "state" + ] + state: Optional[str] + + class TaxRateDetails(StripeObject): + display_name: str + percentage_decimal: str + tax_type: Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "rst", + "sales_tax", + "vat", + ] + + amount: int + jurisdiction: Jurisdiction + sourcing: Literal["destination", "origin"] + tax_rate_details: Optional[TaxRateDetails] + taxability_reason: Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + taxable_amount: int + _inner_class_types = { + "jurisdiction": Jurisdiction, + "tax_rate_details": TaxRateDetails, + } + + amount: int + amount_tax: int + shipping_rate: Optional[str] + tax_behavior: Literal["exclusive", "inclusive"] + tax_breakdown: Optional[List[TaxBreakdown]] + tax_code: str + _inner_class_types = {"tax_breakdown": TaxBreakdown} + + class TaxBreakdown(StripeObject): + class TaxRateDetails(StripeObject): + country: Optional[str] + percentage_decimal: str + state: Optional[str] + tax_type: Optional[ + Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "rst", + "sales_tax", + "vat", + ] + ] + + amount: int + inclusive: bool + tax_rate_details: TaxRateDetails + taxability_reason: Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + taxable_amount: int + _inner_class_types = {"tax_rate_details": TaxRateDetails} + amount_total: int currency: str customer: Optional[str] - customer_details: StripeObject + customer_details: CustomerDetails expires_at: Optional[int] id: Optional[str] line_items: Optional[ListObject["CalculationLineItem"]] livemode: bool object: Literal["tax.calculation"] - shipping_cost: Optional[StripeObject] + shipping_cost: Optional[ShippingCost] tax_amount_exclusive: int tax_amount_inclusive: int - tax_breakdown: List[StripeObject] + tax_breakdown: List[TaxBreakdown] tax_date: int @classmethod @@ -92,3 +291,9 @@ def list_line_items( idempotency_key=idempotency_key, params=params, ) + + _inner_class_types = { + "customer_details": CustomerDetails, + "shipping_cost": ShippingCost, + "tax_breakdown": TaxBreakdown, + } diff --git a/stripe/api_resources/tax/calculation_line_item.py b/stripe/api_resources/tax/calculation_line_item.py index 53b60fc40..b6e497ba9 100644 --- a/stripe/api_resources/tax/calculation_line_item.py +++ b/stripe/api_resources/tax/calculation_line_item.py @@ -7,6 +7,59 @@ class CalculationLineItem(StripeObject): OBJECT_NAME = "tax.calculation_line_item" + + class TaxBreakdown(StripeObject): + class Jurisdiction(StripeObject): + country: str + display_name: str + level: Literal["city", "country", "county", "district", "state"] + state: Optional[str] + + class TaxRateDetails(StripeObject): + display_name: str + percentage_decimal: str + tax_type: Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "rst", + "sales_tax", + "vat", + ] + + amount: int + jurisdiction: Jurisdiction + sourcing: Literal["destination", "origin"] + tax_rate_details: Optional[TaxRateDetails] + taxability_reason: Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + taxable_amount: int + _inner_class_types = { + "jurisdiction": Jurisdiction, + "tax_rate_details": TaxRateDetails, + } + amount: int amount_tax: int id: str @@ -16,5 +69,7 @@ class CalculationLineItem(StripeObject): quantity: int reference: Optional[str] tax_behavior: Literal["exclusive", "inclusive"] - tax_breakdown: Optional[List[StripeObject]] + tax_breakdown: Optional[List[TaxBreakdown]] tax_code: str + + _inner_class_types = {"tax_breakdown": TaxBreakdown} diff --git a/stripe/api_resources/tax/form.py b/stripe/api_resources/tax/form.py index 6aaa52859..3ee9a6191 100644 --- a/stripe/api_resources/tax/form.py +++ b/stripe/api_resources/tax/form.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - import stripe from stripe import api_requestor, util from stripe.api_resources.abstract import ListableAPIResource @@ -12,6 +10,11 @@ from typing_extensions import Literal from urllib.parse import quote_plus +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.api_resources.account import Account + class Form(ListableAPIResource["Form"]): """ @@ -21,17 +24,42 @@ class Form(ListableAPIResource["Form"]): """ OBJECT_NAME = "tax.form" + + class FilingStatus(StripeObject): + class Jurisdiction(StripeObject): + country: str + level: Literal["country", "state"] + state: Optional[str] + + effective_at: int + jurisdiction: Jurisdiction + value: Literal["accepted", "filed", "rejected"] + _inner_class_types = {"jurisdiction": Jurisdiction} + + class Payee(StripeObject): + account: Optional[ExpandableField["Account"]] + type: Literal["account"] + + class Us1099K(StripeObject): + reporting_year: int + + class Us1099Misc(StripeObject): + reporting_year: int + + class Us1099Nec(StripeObject): + reporting_year: int + corrected_by: Optional[ExpandableField["Form"]] created: int - filing_statuses: List[StripeObject] + filing_statuses: List[FilingStatus] id: str livemode: bool object: Literal["tax.form"] - payee: StripeObject + payee: Payee type: Literal["us_1099_k", "us_1099_misc", "us_1099_nec"] - us_1099_k: Optional[StripeObject] - us_1099_misc: Optional[StripeObject] - us_1099_nec: Optional[StripeObject] + us_1099_k: Optional[Us1099K] + us_1099_misc: Optional[Us1099Misc] + us_1099_nec: Optional[Us1099Nec] @classmethod def list( @@ -109,3 +137,11 @@ def pdf( ) url = self.instance_url() + "/pdf" return requestor.request_stream("get", url, params=params) + + _inner_class_types = { + "filing_statuses": FilingStatus, + "payee": Payee, + "us_1099_k": Us1099K, + "us_1099_misc": Us1099Misc, + "us_1099_nec": Us1099Nec, + } diff --git a/stripe/api_resources/tax/registration.py b/stripe/api_resources/tax/registration.py index 4ab4106db..9762de5a9 100644 --- a/stripe/api_resources/tax/registration.py +++ b/stripe/api_resources/tax/registration.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - from stripe.api_resources.abstract import ( CreateableAPIResource, ListableAPIResource, @@ -28,9 +26,412 @@ class Registration( """ OBJECT_NAME = "tax.registration" + + class CountryOptions(StripeObject): + class Ae(StripeObject): + type: Literal["standard"] + + class At(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Au(StripeObject): + type: Literal["standard"] + + class Be(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Bg(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Ca(StripeObject): + class ProvinceStandard(StripeObject): + province: str + + province_standard: Optional[ProvinceStandard] + type: Literal["province_standard", "simplified", "standard"] + _inner_class_types = {"province_standard": ProvinceStandard} + + class Ch(StripeObject): + type: Literal["standard"] + + class Cl(StripeObject): + type: Literal["simplified"] + + class Co(StripeObject): + type: Literal["simplified"] + + class Cy(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Cz(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class De(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Dk(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Ee(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Es(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Fi(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Fr(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Gb(StripeObject): + type: Literal["standard"] + + class Gr(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Hr(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Hu(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Id(StripeObject): + type: Literal["simplified"] + + class Ie(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Is(StripeObject): + type: Literal["standard"] + + class It(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Jp(StripeObject): + type: Literal["standard"] + + class Kr(StripeObject): + type: Literal["simplified"] + + class Lt(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Lu(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Lv(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Mt(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Mx(StripeObject): + type: Literal["simplified"] + + class My(StripeObject): + type: Literal["simplified"] + + class Nl(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class No(StripeObject): + type: Literal["standard"] + + class Nz(StripeObject): + type: Literal["standard"] + + class Pl(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Pt(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Ro(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Sa(StripeObject): + type: Literal["simplified"] + + class Se(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Sg(StripeObject): + type: Literal["standard"] + + class Si(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Sk(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["small_seller", "standard"] + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + _inner_class_types = {"standard": Standard} + + class Th(StripeObject): + type: Literal["simplified"] + + class Tr(StripeObject): + type: Literal["simplified"] + + class Us(StripeObject): + class LocalAmusementTax(StripeObject): + jurisdiction: str + + class LocalLeaseTax(StripeObject): + jurisdiction: str + + local_amusement_tax: Optional[LocalAmusementTax] + local_lease_tax: Optional[LocalLeaseTax] + state: str + type: Literal["local_lease_tax", "state_sales_tax"] + _inner_class_types = { + "local_amusement_tax": LocalAmusementTax, + "local_lease_tax": LocalLeaseTax, + } + + class Vn(StripeObject): + type: Literal["simplified"] + + class Za(StripeObject): + type: Literal["standard"] + + ae: Optional[Ae] + at: Optional[At] + au: Optional[Au] + be: Optional[Be] + bg: Optional[Bg] + ca: Optional[Ca] + ch: Optional[Ch] + cl: Optional[Cl] + co: Optional[Co] + cy: Optional[Cy] + cz: Optional[Cz] + de: Optional[De] + dk: Optional[Dk] + ee: Optional[Ee] + es: Optional[Es] + fi: Optional[Fi] + fr: Optional[Fr] + gb: Optional[Gb] + gr: Optional[Gr] + hr: Optional[Hr] + hu: Optional[Hu] + id: Optional[Id] + ie: Optional[Ie] + # TODO: Cannot include a type definition for is as it is a python reserved word + it: Optional[It] + jp: Optional[Jp] + kr: Optional[Kr] + lt: Optional[Lt] + lu: Optional[Lu] + lv: Optional[Lv] + mt: Optional[Mt] + mx: Optional[Mx] + my: Optional[My] + nl: Optional[Nl] + no: Optional[No] + nz: Optional[Nz] + pl: Optional[Pl] + pt: Optional[Pt] + ro: Optional[Ro] + sa: Optional[Sa] + se: Optional[Se] + sg: Optional[Sg] + si: Optional[Si] + sk: Optional[Sk] + th: Optional[Th] + tr: Optional[Tr] + us: Optional[Us] + vn: Optional[Vn] + za: Optional[Za] + _inner_class_types = { + "ae": Ae, + "at": At, + "au": Au, + "be": Be, + "bg": Bg, + "ca": Ca, + "ch": Ch, + "cl": Cl, + "co": Co, + "cy": Cy, + "cz": Cz, + "de": De, + "dk": Dk, + "ee": Ee, + "es": Es, + "fi": Fi, + "fr": Fr, + "gb": Gb, + "gr": Gr, + "hr": Hr, + "hu": Hu, + "id": Id, + "ie": Ie, + "is": Is, + "it": It, + "jp": Jp, + "kr": Kr, + "lt": Lt, + "lu": Lu, + "lv": Lv, + "mt": Mt, + "mx": Mx, + "my": My, + "nl": Nl, + "no": No, + "nz": Nz, + "pl": Pl, + "pt": Pt, + "ro": Ro, + "sa": Sa, + "se": Se, + "sg": Sg, + "si": Si, + "sk": Sk, + "th": Th, + "tr": Tr, + "us": Us, + "vn": Vn, + "za": Za, + } + active_from: int country: str - country_options: StripeObject + country_options: CountryOptions created: int expires_at: Optional[int] id: str @@ -92,3 +493,5 @@ def modify(cls, id, **params: Any) -> "Registration": "Registration", cls._static_request("post", url, params=params), ) + + _inner_class_types = {"country_options": CountryOptions} diff --git a/stripe/api_resources/tax/settings.py b/stripe/api_resources/tax/settings.py index 40f352566..53b821fe1 100644 --- a/stripe/api_resources/tax/settings.py +++ b/stripe/api_resources/tax/settings.py @@ -5,7 +5,7 @@ UpdateableAPIResource, ) from stripe.stripe_object import StripeObject -from typing import Any, Optional, cast +from typing import Any, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus @@ -21,12 +21,42 @@ class Settings( """ OBJECT_NAME = "tax.settings" - defaults: StripeObject - head_office: Optional[StripeObject] + + class Defaults(StripeObject): + tax_behavior: Optional[ + Literal["exclusive", "inclusive", "inferred_by_currency"] + ] + tax_code: Optional[str] + + class HeadOffice(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address + _inner_class_types = {"address": Address} + + class StatusDetails(StripeObject): + class Active(StripeObject): + pass + + class Pending(StripeObject): + missing_fields: Optional[List[str]] + + active: Optional[Active] + pending: Optional[Pending] + _inner_class_types = {"active": Active, "pending": Pending} + + defaults: Defaults + head_office: Optional[HeadOffice] livemode: bool object: Literal["tax.settings"] status: Literal["active", "pending"] - status_details: StripeObject + status_details: StatusDetails @classmethod def modify(cls, id, **params: Any) -> "Settings": @@ -45,3 +75,9 @@ def retrieve(cls, **params: Any) -> "Settings": @classmethod def class_url(cls): return "/v1/tax/settings" + + _inner_class_types = { + "defaults": Defaults, + "head_office": HeadOffice, + "status_details": StatusDetails, + } diff --git a/stripe/api_resources/tax/transaction.py b/stripe/api_resources/tax/transaction.py index 67b1cc051..215f804a1 100644 --- a/stripe/api_resources/tax/transaction.py +++ b/stripe/api_resources/tax/transaction.py @@ -4,7 +4,7 @@ from stripe.api_resources.abstract import APIResource from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional +from typing import Any, Dict, List, Optional from typing_extensions import Literal from typing_extensions import TYPE_CHECKING @@ -23,18 +23,175 @@ class Transaction(APIResource["Transaction"]): """ OBJECT_NAME = "tax.transaction" + + class CustomerDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: str + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + class TaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "ar_cuit", + "au_abn", + "au_arn", + "bg_uic", + "bo_tin", + "br_cnpj", + "br_cpf", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "ch_vat", + "cl_tin", + "cn_tin", + "co_nit", + "cr_tin", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "hk_br", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kr_brn", + "li_uid", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "no_vat", + "nz_gst", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sv_nit", + "th_vat", + "tr_tin", + "tw_vat", + "ua_vat", + "unknown", + "us_ein", + "uy_ruc", + "ve_rif", + "vn_tin", + "za_vat", + ] + value: str + + address: Optional[Address] + address_source: Optional[Literal["billing", "shipping"]] + ip_address: Optional[str] + tax_ids: List[TaxId] + taxability_override: Literal[ + "customer_exempt", "none", "reverse_charge" + ] + _inner_class_types = {"address": Address, "tax_ids": TaxId} + + class Reversal(StripeObject): + original_transaction: Optional[str] + + class ShippingCost(StripeObject): + class TaxBreakdown(StripeObject): + class Jurisdiction(StripeObject): + country: str + display_name: str + level: Literal[ + "city", "country", "county", "district", "state" + ] + state: Optional[str] + + class TaxRateDetails(StripeObject): + display_name: str + percentage_decimal: str + tax_type: Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "rst", + "sales_tax", + "vat", + ] + + amount: int + jurisdiction: Jurisdiction + sourcing: Literal["destination", "origin"] + tax_rate_details: Optional[TaxRateDetails] + taxability_reason: Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + taxable_amount: int + _inner_class_types = { + "jurisdiction": Jurisdiction, + "tax_rate_details": TaxRateDetails, + } + + amount: int + amount_tax: int + shipping_rate: Optional[str] + tax_behavior: Literal["exclusive", "inclusive"] + tax_breakdown: Optional[List[TaxBreakdown]] + tax_code: str + _inner_class_types = {"tax_breakdown": TaxBreakdown} + created: int currency: str customer: Optional[str] - customer_details: StripeObject + customer_details: CustomerDetails id: str line_items: Optional[ListObject["TransactionLineItem"]] livemode: bool metadata: Optional[Dict[str, str]] object: Literal["tax.transaction"] reference: str - reversal: Optional[StripeObject] - shipping_cost: Optional[StripeObject] + reversal: Optional[Reversal] + shipping_cost: Optional[ShippingCost] tax_date: int type: Literal["reversal", "transaction"] @@ -112,3 +269,9 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "customer_details": CustomerDetails, + "reversal": Reversal, + "shipping_cost": ShippingCost, + } diff --git a/stripe/api_resources/tax/transaction_line_item.py b/stripe/api_resources/tax/transaction_line_item.py index 7e3f14191..75fc808c8 100644 --- a/stripe/api_resources/tax/transaction_line_item.py +++ b/stripe/api_resources/tax/transaction_line_item.py @@ -7,6 +7,10 @@ class TransactionLineItem(StripeObject): OBJECT_NAME = "tax.transaction_line_item" + + class Reversal(StripeObject): + original_line_item: str + amount: int amount_tax: int id: str @@ -16,7 +20,9 @@ class TransactionLineItem(StripeObject): product: Optional[str] quantity: int reference: str - reversal: Optional[StripeObject] + reversal: Optional[Reversal] tax_behavior: Literal["exclusive", "inclusive"] tax_code: str type: Literal["reversal", "transaction"] + + _inner_class_types = {"reversal": Reversal} diff --git a/stripe/api_resources/tax_id.py b/stripe/api_resources/tax_id.py index 8c837131e..9f58234d3 100644 --- a/stripe/api_resources/tax_id.py +++ b/stripe/api_resources/tax_id.py @@ -18,6 +18,12 @@ class TaxId(APIResource["TaxId"]): """ OBJECT_NAME = "tax_id" + + class Verification(StripeObject): + status: Literal["pending", "unavailable", "unverified", "verified"] + verified_address: Optional[str] + verified_name: Optional[str] + country: Optional[str] created: int customer: Optional[ExpandableField["Customer"]] @@ -94,7 +100,7 @@ class TaxId(APIResource["TaxId"]): "za_vat", ] value: str - verification: Optional[StripeObject] + verification: Optional[Verification] deleted: Optional[Literal[True]] def instance_url(self): @@ -113,3 +119,5 @@ def retrieve(cls, id, api_key=None, **params): raise NotImplementedError( "Can't retrieve a tax id without a customer ID. Use customer.retrieve_tax_id('tax_id')" ) + + _inner_class_types = {"verification": Verification} diff --git a/stripe/api_resources/terminal/configuration.py b/stripe/api_resources/terminal/configuration.py index 847658ac2..0846f2d2f 100644 --- a/stripe/api_resources/terminal/configuration.py +++ b/stripe/api_resources/terminal/configuration.py @@ -7,12 +7,18 @@ ListableAPIResource, UpdateableAPIResource, ) +from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Optional, cast +from typing import Any, List, Optional, cast from typing_extensions import Literal from urllib.parse import quote_plus +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.api_resources.file import File + class Configuration( CreateableAPIResource["Configuration"], @@ -25,14 +31,122 @@ class Configuration( """ OBJECT_NAME = "terminal.configuration" - bbpos_wisepos_e: Optional[StripeObject] + + class BbposWiseposE(StripeObject): + splashscreen: Optional[ExpandableField["File"]] + + class Tipping(StripeObject): + class Aud(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Cad(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Chf(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Czk(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Dkk(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Eur(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Gbp(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Hkd(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Myr(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Nok(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Nzd(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Sek(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Sgd(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + class Usd(StripeObject): + fixed_amounts: Optional[List[int]] + percentages: Optional[List[int]] + smart_tip_threshold: Optional[int] + + aud: Optional[Aud] + cad: Optional[Cad] + chf: Optional[Chf] + czk: Optional[Czk] + dkk: Optional[Dkk] + eur: Optional[Eur] + gbp: Optional[Gbp] + hkd: Optional[Hkd] + myr: Optional[Myr] + nok: Optional[Nok] + nzd: Optional[Nzd] + sek: Optional[Sek] + sgd: Optional[Sgd] + usd: Optional[Usd] + _inner_class_types = { + "aud": Aud, + "cad": Cad, + "chf": Chf, + "czk": Czk, + "dkk": Dkk, + "eur": Eur, + "gbp": Gbp, + "hkd": Hkd, + "myr": Myr, + "nok": Nok, + "nzd": Nzd, + "sek": Sek, + "sgd": Sgd, + "usd": Usd, + } + + class VerifoneP400(StripeObject): + splashscreen: Optional[ExpandableField["File"]] + + bbpos_wisepos_e: Optional[BbposWiseposE] id: str is_account_default: Optional[bool] livemode: bool object: Literal["terminal.configuration"] - offline: Optional[StripeObject] - tipping: Optional[StripeObject] - verifone_p400: Optional[StripeObject] + tipping: Optional[Tipping] + verifone_p400: Optional[VerifoneP400] deleted: Optional[Literal[True]] @classmethod @@ -113,3 +227,9 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "bbpos_wisepos_e": BbposWiseposE, + "tipping": Tipping, + "verifone_p400": VerifoneP400, + } diff --git a/stripe/api_resources/terminal/location.py b/stripe/api_resources/terminal/location.py index 4d2ed212d..327e72927 100644 --- a/stripe/api_resources/terminal/location.py +++ b/stripe/api_resources/terminal/location.py @@ -27,7 +27,16 @@ class Location( """ OBJECT_NAME = "terminal.location" - address: StripeObject + + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address configuration_overrides: Optional[str] display_name: str id: str @@ -114,3 +123,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"address": Address} diff --git a/stripe/api_resources/terminal/reader.py b/stripe/api_resources/terminal/reader.py index ddeb51c64..51f3885b4 100644 --- a/stripe/api_resources/terminal/reader.py +++ b/stripe/api_resources/terminal/reader.py @@ -11,13 +11,18 @@ from stripe.api_resources.expandable_field import ExpandableField from stripe.api_resources.list_object import ListObject from stripe.stripe_object import StripeObject -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, List, Optional, cast from typing_extensions import Literal, Type from urllib.parse import quote_plus from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.charge import Charge + from stripe.api_resources.payment_intent import PaymentIntent + from stripe.api_resources.payment_method import PaymentMethod + from stripe.api_resources.refund import Refund + from stripe.api_resources.setup_intent import SetupIntent from stripe.api_resources.terminal.location import Location @@ -34,7 +39,153 @@ class Reader( """ OBJECT_NAME = "terminal.reader" - action: Optional[StripeObject] + + class Action(StripeObject): + class CollectInputs(StripeObject): + class Input(StripeObject): + class CustomText(StripeObject): + description: Optional[str] + skip_button: Optional[str] + submit_button: Optional[str] + title: Optional[str] + + class Selection(StripeObject): + class Choice(StripeObject): + style: Optional[Literal["primary", "secondary"]] + value: str + + choices: List[Choice] + value: Optional[str] + _inner_class_types = {"choices": Choice} + + class Signature(StripeObject): + value: Optional[str] + + custom_text: Optional[CustomText] + required: Optional[bool] + selection: Optional[Selection] + signature: Optional[Signature] + skipped: Optional[bool] + type: Literal[ + "email", + "numeric", + "phone", + "selection", + "signature", + "text", + ] + _inner_class_types = { + "custom_text": CustomText, + "selection": Selection, + "signature": Signature, + } + + inputs: List[Input] + metadata: Optional[Dict[str, str]] + _inner_class_types = {"inputs": Input} + + class CollectPaymentMethod(StripeObject): + class CollectConfig(StripeObject): + class Tipping(StripeObject): + amount_eligible: Optional[int] + + skip_tipping: Optional[bool] + tipping: Optional[Tipping] + _inner_class_types = {"tipping": Tipping} + + collect_config: Optional[CollectConfig] + payment_intent: ExpandableField["PaymentIntent"] + payment_method: Optional["PaymentMethod"] + stripe_account: Optional[str] + _inner_class_types = {"collect_config": CollectConfig} + + class ConfirmPaymentIntent(StripeObject): + payment_intent: ExpandableField["PaymentIntent"] + stripe_account: Optional[str] + + class ProcessPaymentIntent(StripeObject): + class ProcessConfig(StripeObject): + class Tipping(StripeObject): + amount_eligible: Optional[int] + + skip_tipping: Optional[bool] + tipping: Optional[Tipping] + _inner_class_types = {"tipping": Tipping} + + payment_intent: ExpandableField["PaymentIntent"] + process_config: Optional[ProcessConfig] + stripe_account: Optional[str] + _inner_class_types = {"process_config": ProcessConfig} + + class ProcessSetupIntent(StripeObject): + class ProcessConfig(StripeObject): + pass + + generated_card: Optional[str] + process_config: Optional[ProcessConfig] + setup_intent: ExpandableField["SetupIntent"] + _inner_class_types = {"process_config": ProcessConfig} + + class RefundPayment(StripeObject): + amount: Optional[int] + charge: Optional[ExpandableField["Charge"]] + metadata: Optional[Dict[str, str]] + payment_intent: Optional[ExpandableField["PaymentIntent"]] + reason: Optional[ + Literal["duplicate", "fraudulent", "requested_by_customer"] + ] + refund: Optional[ExpandableField["Refund"]] + refund_application_fee: Optional[bool] + reverse_transfer: Optional[bool] + stripe_account: Optional[str] + + class SetReaderDisplay(StripeObject): + class Cart(StripeObject): + class LineItem(StripeObject): + amount: int + description: str + quantity: int + + currency: str + line_items: List[LineItem] + tax: Optional[int] + total: int + _inner_class_types = {"line_items": LineItem} + + cart: Optional[Cart] + type: Literal["cart"] + _inner_class_types = {"cart": Cart} + + collect_inputs: Optional[CollectInputs] + collect_payment_method: Optional[CollectPaymentMethod] + confirm_payment_intent: Optional[ConfirmPaymentIntent] + failure_code: Optional[str] + failure_message: Optional[str] + process_payment_intent: Optional[ProcessPaymentIntent] + process_setup_intent: Optional[ProcessSetupIntent] + refund_payment: Optional[RefundPayment] + set_reader_display: Optional[SetReaderDisplay] + status: Literal["failed", "in_progress", "succeeded"] + type: Literal[ + "collect_inputs", + "collect_payment_method", + "confirm_payment_intent", + "process_payment_intent", + "process_setup_intent", + "refund_payment", + "set_reader_display", + ] + _inner_class_types = { + "collect_inputs": CollectInputs, + "collect_payment_method": CollectPaymentMethod, + "confirm_payment_intent": ConfirmPaymentIntent, + "process_payment_intent": ProcessPaymentIntent, + "process_setup_intent": ProcessSetupIntent, + "refund_payment": RefundPayment, + "set_reader_display": SetReaderDisplay, + } + + action: Optional[Action] device_sw_version: Optional[str] device_type: Literal[ "bbpos_chipper2x", @@ -438,5 +589,7 @@ def present_payment_method( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = {"action": Action} + Reader.TestHelpers._resource_cls = Reader diff --git a/stripe/api_resources/treasury/credit_reversal.py b/stripe/api_resources/treasury/credit_reversal.py index 2f6e336dd..cc0ab37e8 100644 --- a/stripe/api_resources/treasury/credit_reversal.py +++ b/stripe/api_resources/treasury/credit_reversal.py @@ -25,6 +25,10 @@ class CreditReversal( """ OBJECT_NAME = "treasury.credit_reversal" + + class StatusTransitions(StripeObject): + posted_at: Optional[int] + amount: int created: int currency: str @@ -37,7 +41,7 @@ class CreditReversal( object: Literal["treasury.credit_reversal"] received_credit: str status: Literal["canceled", "posted", "processing"] - status_transitions: StripeObject + status_transitions: StatusTransitions transaction: Optional[ExpandableField["Transaction"]] @classmethod @@ -94,3 +98,5 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = {"status_transitions": StatusTransitions} diff --git a/stripe/api_resources/treasury/debit_reversal.py b/stripe/api_resources/treasury/debit_reversal.py index 9eeb0eb14..1c982c562 100644 --- a/stripe/api_resources/treasury/debit_reversal.py +++ b/stripe/api_resources/treasury/debit_reversal.py @@ -25,20 +25,27 @@ class DebitReversal( """ OBJECT_NAME = "treasury.debit_reversal" + + class LinkedFlows(StripeObject): + issuing_dispute: Optional[str] + + class StatusTransitions(StripeObject): + completed_at: Optional[int] + amount: int created: int currency: str financial_account: Optional[str] hosted_regulatory_receipt_url: Optional[str] id: str - linked_flows: Optional[StripeObject] + linked_flows: Optional[LinkedFlows] livemode: bool metadata: Dict[str, str] network: Literal["ach", "card"] object: Literal["treasury.debit_reversal"] received_debit: str status: Literal["failed", "processing", "succeeded"] - status_transitions: StripeObject + status_transitions: StatusTransitions transaction: Optional[ExpandableField["Transaction"]] @classmethod @@ -95,3 +102,8 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "linked_flows": LinkedFlows, + "status_transitions": StatusTransitions, + } diff --git a/stripe/api_resources/treasury/financial_account.py b/stripe/api_resources/treasury/financial_account.py index df806287a..9ebd14471 100644 --- a/stripe/api_resources/treasury/financial_account.py +++ b/stripe/api_resources/treasury/financial_account.py @@ -31,6 +31,38 @@ class FinancialAccount( """ OBJECT_NAME = "treasury.financial_account" + + class Balance(StripeObject): + cash: Dict[str, int] + inbound_pending: Dict[str, int] + outbound_pending: Dict[str, int] + + class FinancialAddress(StripeObject): + class Aba(StripeObject): + account_holder_name: str + account_number: Optional[str] + account_number_last4: str + bank_name: str + routing_number: str + + aba: Optional[Aba] + supported_networks: Optional[List[Literal["ach", "us_domestic_wire"]]] + type: Literal["aba"] + _inner_class_types = {"aba": Aba} + + class PlatformRestrictions(StripeObject): + inbound_flows: Optional[Literal["restricted", "unrestricted"]] + outbound_flows: Optional[Literal["restricted", "unrestricted"]] + + class StatusDetails(StripeObject): + class Closed(StripeObject): + reasons: List[ + Literal["account_rejected", "closed_by_platform", "other"] + ] + + closed: Optional[Closed] + _inner_class_types = {"closed": Closed} + active_features: Optional[ List[ Literal[ @@ -47,11 +79,11 @@ class FinancialAccount( ] ] ] - balance: StripeObject + balance: Balance country: str created: int features: Optional["FinancialAccountFeatures"] - financial_addresses: List[StripeObject] + financial_addresses: List[FinancialAddress] id: str livemode: bool metadata: Optional[Dict[str, str]] @@ -72,7 +104,7 @@ class FinancialAccount( ] ] ] - platform_restrictions: Optional[StripeObject] + platform_restrictions: Optional[PlatformRestrictions] restricted_features: Optional[ List[ Literal[ @@ -90,7 +122,7 @@ class FinancialAccount( ] ] status: Literal["closed", "open"] - status_details: StripeObject + status_details: StatusDetails supported_currencies: List[str] @classmethod @@ -221,3 +253,10 @@ def update_features( idempotency_key=idempotency_key, params=params, ) + + _inner_class_types = { + "balance": Balance, + "financial_addresses": FinancialAddress, + "platform_restrictions": PlatformRestrictions, + "status_details": StatusDetails, + } diff --git a/stripe/api_resources/treasury/financial_account_features.py b/stripe/api_resources/treasury/financial_account_features.py index 885bc2026..fbbfbb768 100644 --- a/stripe/api_resources/treasury/financial_account_features.py +++ b/stripe/api_resources/treasury/financial_account_features.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # File generated from our OpenAPI spec from stripe.stripe_object import StripeObject -from typing import Optional +from typing import List, Optional from typing_extensions import Literal @@ -12,11 +12,295 @@ class FinancialAccountFeatures(StripeObject): """ OBJECT_NAME = "treasury.financial_account_features" - card_issuing: Optional[StripeObject] - deposit_insurance: Optional[StripeObject] - financial_addresses: Optional[StripeObject] - inbound_transfers: Optional[StripeObject] - intra_stripe_flows: Optional[StripeObject] + + class CardIssuing(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[Literal["inbound_flows", "outbound_flows"]] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + class DepositInsurance(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[Literal["inbound_flows", "outbound_flows"]] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + class FinancialAddresses(StripeObject): + class Aba(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + aba: Optional[Aba] + _inner_class_types = {"aba": Aba} + + class InboundTransfers(StripeObject): + class Ach(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + ach: Optional[Ach] + _inner_class_types = {"ach": Ach} + + class IntraStripeFlows(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[Literal["inbound_flows", "outbound_flows"]] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + class OutboundPayments(StripeObject): + class Ach(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + class UsDomesticWire(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + ach: Optional[Ach] + us_domestic_wire: Optional[UsDomesticWire] + _inner_class_types = {"ach": Ach, "us_domestic_wire": UsDomesticWire} + + class OutboundTransfers(StripeObject): + class Ach(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + class UsDomesticWire(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + + requested: bool + status: Literal["active", "pending", "restricted"] + status_details: List[StatusDetail] + _inner_class_types = {"status_details": StatusDetail} + + ach: Optional[Ach] + us_domestic_wire: Optional[UsDomesticWire] + _inner_class_types = {"ach": Ach, "us_domestic_wire": UsDomesticWire} + + card_issuing: Optional[CardIssuing] + deposit_insurance: Optional[DepositInsurance] + financial_addresses: Optional[FinancialAddresses] + inbound_transfers: Optional[InboundTransfers] + intra_stripe_flows: Optional[IntraStripeFlows] object: Literal["treasury.financial_account_features"] - outbound_payments: Optional[StripeObject] - outbound_transfers: Optional[StripeObject] + outbound_payments: Optional[OutboundPayments] + outbound_transfers: Optional[OutboundTransfers] + + _inner_class_types = { + "card_issuing": CardIssuing, + "deposit_insurance": DepositInsurance, + "financial_addresses": FinancialAddresses, + "inbound_transfers": InboundTransfers, + "intra_stripe_flows": IntraStripeFlows, + "outbound_payments": OutboundPayments, + "outbound_transfers": OutboundTransfers, + } diff --git a/stripe/api_resources/treasury/inbound_transfer.py b/stripe/api_resources/treasury/inbound_transfer.py index 0f8315c45..21f81abde 100644 --- a/stripe/api_resources/treasury/inbound_transfer.py +++ b/stripe/api_resources/treasury/inbound_transfer.py @@ -27,25 +27,83 @@ class InboundTransfer( """ OBJECT_NAME = "treasury.inbound_transfer" + + class FailureDetails(StripeObject): + code: Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "debit_not_authorized", + "incorrect_account_holder_address", + "incorrect_account_holder_name", + "incorrect_account_holder_tax_id", + "insufficient_funds", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + + class LinkedFlows(StripeObject): + received_debit: Optional[str] + + class OriginPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address + email: Optional[str] + name: Optional[str] + _inner_class_types = {"address": Address} + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + account_type: Optional[Literal["checking", "savings"]] + bank_name: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + network: Literal["ach"] + routing_number: Optional[str] + + billing_details: BillingDetails + type: Literal["us_bank_account"] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "us_bank_account": UsBankAccount, + } + + class StatusTransitions(StripeObject): + canceled_at: Optional[int] + failed_at: Optional[int] + succeeded_at: Optional[int] + amount: int cancelable: bool created: int currency: str description: Optional[str] - failure_details: Optional[StripeObject] + failure_details: Optional[FailureDetails] financial_account: str hosted_regulatory_receipt_url: Optional[str] id: str - linked_flows: StripeObject + linked_flows: LinkedFlows livemode: bool metadata: Dict[str, str] object: Literal["treasury.inbound_transfer"] origin_payment_method: str - origin_payment_method_details: Optional[StripeObject] + origin_payment_method_details: Optional[OriginPaymentMethodDetails] returned: Optional[bool] statement_descriptor: str status: Literal["canceled", "failed", "processing", "succeeded"] - status_transitions: StripeObject + status_transitions: StatusTransitions transaction: Optional[ExpandableField["Transaction"]] @classmethod @@ -238,5 +296,12 @@ def succeed( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "failure_details": FailureDetails, + "linked_flows": LinkedFlows, + "origin_payment_method_details": OriginPaymentMethodDetails, + "status_transitions": StatusTransitions, + } + InboundTransfer.TestHelpers._resource_cls = InboundTransfer diff --git a/stripe/api_resources/treasury/outbound_payment.py b/stripe/api_resources/treasury/outbound_payment.py index 7eabe1f59..6ea8a136e 100644 --- a/stripe/api_resources/treasury/outbound_payment.py +++ b/stripe/api_resources/treasury/outbound_payment.py @@ -29,6 +29,70 @@ class OutboundPayment( """ OBJECT_NAME = "treasury.outbound_payment" + + class DestinationPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address + email: Optional[str] + name: Optional[str] + _inner_class_types = {"address": Address} + + class FinancialAccount(StripeObject): + id: str + network: Literal["stripe"] + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + account_type: Optional[Literal["checking", "savings"]] + bank_name: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + network: Literal["ach", "us_domestic_wire"] + routing_number: Optional[str] + + billing_details: BillingDetails + financial_account: Optional[FinancialAccount] + type: Literal["financial_account", "us_bank_account"] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "financial_account": FinancialAccount, + "us_bank_account": UsBankAccount, + } + + class EndUserDetails(StripeObject): + ip_address: Optional[str] + present: bool + + class ReturnedDetails(StripeObject): + code: Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "declined", + "incorrect_account_holder_name", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + transaction: ExpandableField["Transaction"] + + class StatusTransitions(StripeObject): + canceled_at: Optional[int] + failed_at: Optional[int] + posted_at: Optional[int] + returned_at: Optional[int] + amount: int cancelable: bool created: int @@ -36,8 +100,10 @@ class OutboundPayment( customer: Optional[str] description: Optional[str] destination_payment_method: Optional[str] - destination_payment_method_details: Optional[StripeObject] - end_user_details: Optional[StripeObject] + destination_payment_method_details: Optional[ + DestinationPaymentMethodDetails + ] + end_user_details: Optional[EndUserDetails] expected_arrival_date: int financial_account: str hosted_regulatory_receipt_url: Optional[str] @@ -45,10 +111,10 @@ class OutboundPayment( livemode: bool metadata: Dict[str, str] object: Literal["treasury.outbound_payment"] - returned_details: Optional[StripeObject] + returned_details: Optional[ReturnedDetails] statement_descriptor: str status: Literal["canceled", "failed", "posted", "processing", "returned"] - status_transitions: StripeObject + status_transitions: StatusTransitions transaction: ExpandableField["Transaction"] @classmethod @@ -239,5 +305,12 @@ def return_outbound_payment( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "destination_payment_method_details": DestinationPaymentMethodDetails, + "end_user_details": EndUserDetails, + "returned_details": ReturnedDetails, + "status_transitions": StatusTransitions, + } + OutboundPayment.TestHelpers._resource_cls = OutboundPayment diff --git a/stripe/api_resources/treasury/outbound_transfer.py b/stripe/api_resources/treasury/outbound_transfer.py index 33530716a..b4bc4af15 100644 --- a/stripe/api_resources/treasury/outbound_transfer.py +++ b/stripe/api_resources/treasury/outbound_transfer.py @@ -29,25 +29,87 @@ class OutboundTransfer( """ OBJECT_NAME = "treasury.outbound_transfer" + + class DestinationPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address + email: Optional[str] + name: Optional[str] + _inner_class_types = {"address": Address} + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + account_type: Optional[Literal["checking", "savings"]] + bank_name: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + network: Literal["ach", "us_domestic_wire"] + routing_number: Optional[str] + + billing_details: BillingDetails + type: Literal["us_bank_account"] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "us_bank_account": UsBankAccount, + } + + class NetworkDetails(StripeObject): + class Ach(StripeObject): + addenda: Optional[str] + + ach: Optional[Ach] + type: Literal["ach"] + _inner_class_types = {"ach": Ach} + + class ReturnedDetails(StripeObject): + code: Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "declined", + "incorrect_account_holder_name", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + transaction: ExpandableField["Transaction"] + + class StatusTransitions(StripeObject): + canceled_at: Optional[int] + failed_at: Optional[int] + posted_at: Optional[int] + returned_at: Optional[int] + amount: int cancelable: bool created: int currency: str description: Optional[str] destination_payment_method: Optional[str] - destination_payment_method_details: StripeObject + destination_payment_method_details: DestinationPaymentMethodDetails expected_arrival_date: int financial_account: str hosted_regulatory_receipt_url: Optional[str] id: str livemode: bool metadata: Dict[str, str] - network_details: Optional[StripeObject] + network_details: Optional[NetworkDetails] object: Literal["treasury.outbound_transfer"] - returned_details: Optional[StripeObject] + returned_details: Optional[ReturnedDetails] statement_descriptor: str status: Literal["canceled", "failed", "posted", "processing", "returned"] - status_transitions: StripeObject + status_transitions: StatusTransitions transaction: ExpandableField["Transaction"] @classmethod @@ -238,5 +300,12 @@ def return_outbound_transfer( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "destination_payment_method_details": DestinationPaymentMethodDetails, + "network_details": NetworkDetails, + "returned_details": ReturnedDetails, + "status_transitions": StatusTransitions, + } + OutboundTransfer.TestHelpers._resource_cls = OutboundTransfer diff --git a/stripe/api_resources/treasury/received_credit.py b/stripe/api_resources/treasury/received_credit.py index e9efa54fb..669c6cbc3 100644 --- a/stripe/api_resources/treasury/received_credit.py +++ b/stripe/api_resources/treasury/received_credit.py @@ -13,6 +13,9 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.payout import Payout + from stripe.api_resources.treasury.credit_reversal import CreditReversal + from stripe.api_resources.treasury.outbound_payment import OutboundPayment from stripe.api_resources.treasury.transaction import Transaction @@ -22,6 +25,86 @@ class ReceivedCredit(ListableAPIResource["ReceivedCredit"]): """ OBJECT_NAME = "treasury.received_credit" + + class InitiatingPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address + email: Optional[str] + name: Optional[str] + _inner_class_types = {"address": Address} + + class FinancialAccount(StripeObject): + id: str + network: Literal["stripe"] + + class UsBankAccount(StripeObject): + bank_name: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + + balance: Optional[Literal["payments"]] + billing_details: BillingDetails + financial_account: Optional[FinancialAccount] + issuing_card: Optional[str] + type: Literal[ + "balance", + "financial_account", + "issuing_card", + "stripe", + "us_bank_account", + ] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "financial_account": FinancialAccount, + "us_bank_account": UsBankAccount, + } + + class LinkedFlows(StripeObject): + class SourceFlowDetails(StripeObject): + credit_reversal: Optional["CreditReversal"] + outbound_payment: Optional["OutboundPayment"] + payout: Optional["Payout"] + type: Literal[ + "credit_reversal", "other", "outbound_payment", "payout" + ] + + credit_reversal: Optional[str] + issuing_authorization: Optional[str] + issuing_transaction: Optional[str] + source_flow: Optional[str] + source_flow_details: Optional[SourceFlowDetails] + source_flow_type: Optional[str] + _inner_class_types = {"source_flow_details": SourceFlowDetails} + + class NetworkDetails(StripeObject): + class Ach(StripeObject): + addenda: Optional[str] + + ach: Optional[Ach] + type: Literal["ach"] + _inner_class_types = {"ach": Ach} + + class ReversalDetails(StripeObject): + deadline: Optional[int] + restricted_reason: Optional[ + Literal[ + "already_reversed", + "deadline_passed", + "network_restricted", + "other", + "source_flow_restricted", + ] + ] + amount: int created: int currency: str @@ -32,13 +115,13 @@ class ReceivedCredit(ListableAPIResource["ReceivedCredit"]): financial_account: Optional[str] hosted_regulatory_receipt_url: Optional[str] id: str - initiating_payment_method_details: StripeObject - linked_flows: StripeObject + initiating_payment_method_details: InitiatingPaymentMethodDetails + linked_flows: LinkedFlows livemode: bool network: Literal["ach", "card", "stripe", "us_domestic_wire"] - network_details: Optional[StripeObject] + network_details: Optional[NetworkDetails] object: Literal["treasury.received_credit"] - reversal_details: Optional[StripeObject] + reversal_details: Optional[ReversalDetails] status: Literal["failed", "succeeded"] transaction: Optional[ExpandableField["Transaction"]] @@ -99,5 +182,12 @@ def create( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "initiating_payment_method_details": InitiatingPaymentMethodDetails, + "linked_flows": LinkedFlows, + "network_details": NetworkDetails, + "reversal_details": ReversalDetails, + } + ReceivedCredit.TestHelpers._resource_cls = ReceivedCredit diff --git a/stripe/api_resources/treasury/received_debit.py b/stripe/api_resources/treasury/received_debit.py index 331011eb1..b1a562f23 100644 --- a/stripe/api_resources/treasury/received_debit.py +++ b/stripe/api_resources/treasury/received_debit.py @@ -22,6 +22,76 @@ class ReceivedDebit(ListableAPIResource["ReceivedDebit"]): """ OBJECT_NAME = "treasury.received_debit" + + class InitiatingPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + country: Optional[str] + line1: Optional[str] + line2: Optional[str] + postal_code: Optional[str] + state: Optional[str] + + address: Address + email: Optional[str] + name: Optional[str] + _inner_class_types = {"address": Address} + + class FinancialAccount(StripeObject): + id: str + network: Literal["stripe"] + + class UsBankAccount(StripeObject): + bank_name: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + + balance: Optional[Literal["payments"]] + billing_details: BillingDetails + financial_account: Optional[FinancialAccount] + issuing_card: Optional[str] + type: Literal[ + "balance", + "financial_account", + "issuing_card", + "stripe", + "us_bank_account", + ] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "financial_account": FinancialAccount, + "us_bank_account": UsBankAccount, + } + + class LinkedFlows(StripeObject): + debit_reversal: Optional[str] + inbound_transfer: Optional[str] + issuing_authorization: Optional[str] + issuing_transaction: Optional[str] + received_credit_capital_withholding: Optional[str] + + class NetworkDetails(StripeObject): + class Ach(StripeObject): + addenda: Optional[str] + + ach: Optional[Ach] + type: Literal["ach"] + _inner_class_types = {"ach": Ach} + + class ReversalDetails(StripeObject): + deadline: Optional[int] + restricted_reason: Optional[ + Literal[ + "already_reversed", + "deadline_passed", + "network_restricted", + "other", + "source_flow_restricted", + ] + ] + amount: int created: int currency: str @@ -34,13 +104,13 @@ class ReceivedDebit(ListableAPIResource["ReceivedDebit"]): financial_account: Optional[str] hosted_regulatory_receipt_url: Optional[str] id: str - initiating_payment_method_details: Optional[StripeObject] - linked_flows: StripeObject + initiating_payment_method_details: Optional[InitiatingPaymentMethodDetails] + linked_flows: LinkedFlows livemode: bool network: Literal["ach", "card", "stripe"] - network_details: Optional[StripeObject] + network_details: Optional[NetworkDetails] object: Literal["treasury.received_debit"] - reversal_details: Optional[StripeObject] + reversal_details: Optional[ReversalDetails] status: Literal["failed", "succeeded"] transaction: Optional[ExpandableField["Transaction"]] @@ -101,5 +171,12 @@ def create( def test_helpers(self): return self.TestHelpers(self) + _inner_class_types = { + "initiating_payment_method_details": InitiatingPaymentMethodDetails, + "linked_flows": LinkedFlows, + "network_details": NetworkDetails, + "reversal_details": ReversalDetails, + } + ReceivedDebit.TestHelpers._resource_cls = ReceivedDebit diff --git a/stripe/api_resources/treasury/transaction.py b/stripe/api_resources/treasury/transaction.py index a3ffdbb7f..c122cf002 100644 --- a/stripe/api_resources/treasury/transaction.py +++ b/stripe/api_resources/treasury/transaction.py @@ -9,6 +9,16 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.issuing.authorization import Authorization + from stripe.api_resources.treasury.credit_reversal import CreditReversal + from stripe.api_resources.treasury.debit_reversal import DebitReversal + from stripe.api_resources.treasury.inbound_transfer import InboundTransfer + from stripe.api_resources.treasury.outbound_payment import OutboundPayment + from stripe.api_resources.treasury.outbound_transfer import ( + OutboundTransfer, + ) + from stripe.api_resources.treasury.received_credit import ReceivedCredit + from stripe.api_resources.treasury.received_debit import ReceivedDebit from stripe.api_resources.treasury.transaction_entry import ( TransactionEntry, ) @@ -20,15 +30,46 @@ class Transaction(ListableAPIResource["Transaction"]): """ OBJECT_NAME = "treasury.transaction" + + class BalanceImpact(StripeObject): + cash: int + inbound_pending: int + outbound_pending: int + + class FlowDetails(StripeObject): + credit_reversal: Optional["CreditReversal"] + debit_reversal: Optional["DebitReversal"] + inbound_transfer: Optional["InboundTransfer"] + issuing_authorization: Optional["Authorization"] + outbound_payment: Optional["OutboundPayment"] + outbound_transfer: Optional["OutboundTransfer"] + received_credit: Optional["ReceivedCredit"] + received_debit: Optional["ReceivedDebit"] + type: Literal[ + "credit_reversal", + "debit_reversal", + "inbound_transfer", + "issuing_authorization", + "other", + "outbound_payment", + "outbound_transfer", + "received_credit", + "received_debit", + ] + + class StatusTransitions(StripeObject): + posted_at: Optional[int] + void_at: Optional[int] + amount: int - balance_impact: StripeObject + balance_impact: BalanceImpact created: int currency: str description: str entries: Optional[ListObject["TransactionEntry"]] financial_account: str flow: Optional[str] - flow_details: Optional[StripeObject] + flow_details: Optional[FlowDetails] flow_type: Literal[ "credit_reversal", "debit_reversal", @@ -44,7 +85,7 @@ class Transaction(ListableAPIResource["Transaction"]): livemode: bool object: Literal["treasury.transaction"] status: Literal["open", "posted", "void"] - status_transitions: StripeObject + status_transitions: StatusTransitions @classmethod def list( @@ -78,3 +119,9 @@ def retrieve( instance = cls(id, api_key, **params) instance.refresh() return instance + + _inner_class_types = { + "balance_impact": BalanceImpact, + "flow_details": FlowDetails, + "status_transitions": StatusTransitions, + } diff --git a/stripe/api_resources/treasury/transaction_entry.py b/stripe/api_resources/treasury/transaction_entry.py index e1f55a209..528c5c7b1 100644 --- a/stripe/api_resources/treasury/transaction_entry.py +++ b/stripe/api_resources/treasury/transaction_entry.py @@ -10,6 +10,16 @@ from typing_extensions import TYPE_CHECKING if TYPE_CHECKING: + from stripe.api_resources.issuing.authorization import Authorization + from stripe.api_resources.treasury.credit_reversal import CreditReversal + from stripe.api_resources.treasury.debit_reversal import DebitReversal + from stripe.api_resources.treasury.inbound_transfer import InboundTransfer + from stripe.api_resources.treasury.outbound_payment import OutboundPayment + from stripe.api_resources.treasury.outbound_transfer import ( + OutboundTransfer, + ) + from stripe.api_resources.treasury.received_credit import ReceivedCredit + from stripe.api_resources.treasury.received_debit import ReceivedDebit from stripe.api_resources.treasury.transaction import Transaction @@ -19,13 +29,40 @@ class TransactionEntry(ListableAPIResource["TransactionEntry"]): """ OBJECT_NAME = "treasury.transaction_entry" - balance_impact: StripeObject + + class BalanceImpact(StripeObject): + cash: int + inbound_pending: int + outbound_pending: int + + class FlowDetails(StripeObject): + credit_reversal: Optional["CreditReversal"] + debit_reversal: Optional["DebitReversal"] + inbound_transfer: Optional["InboundTransfer"] + issuing_authorization: Optional["Authorization"] + outbound_payment: Optional["OutboundPayment"] + outbound_transfer: Optional["OutboundTransfer"] + received_credit: Optional["ReceivedCredit"] + received_debit: Optional["ReceivedDebit"] + type: Literal[ + "credit_reversal", + "debit_reversal", + "inbound_transfer", + "issuing_authorization", + "other", + "outbound_payment", + "outbound_transfer", + "received_credit", + "received_debit", + ] + + balance_impact: BalanceImpact created: int currency: str effective_at: int financial_account: str flow: Optional[str] - flow_details: Optional[StripeObject] + flow_details: Optional[FlowDetails] flow_type: Literal[ "credit_reversal", "debit_reversal", @@ -100,3 +137,8 @@ def retrieve( @classmethod def class_url(cls): return "/v1/treasury/transaction_entries" + + _inner_class_types = { + "balance_impact": BalanceImpact, + "flow_details": FlowDetails, + } diff --git a/stripe/api_resources/usage_record_summary.py b/stripe/api_resources/usage_record_summary.py index af317eb31..0c2fdf7a5 100644 --- a/stripe/api_resources/usage_record_summary.py +++ b/stripe/api_resources/usage_record_summary.py @@ -7,10 +7,17 @@ class UsageRecordSummary(StripeObject): OBJECT_NAME = "usage_record_summary" + + class Period(StripeObject): + end: Optional[int] + start: Optional[int] + id: str invoice: Optional[str] livemode: bool object: Literal["usage_record_summary"] - period: StripeObject + period: Period subscription_item: str total_usage: int + + _inner_class_types = {"period": Period} From 8b1d5cd56c2818b601acc8d142e59c5af4153a9f Mon Sep 17 00:00:00 2001 From: Richard Marmorstein Date: Wed, 11 Oct 2023 13:31:30 -0700 Subject: [PATCH 8/8] Don't filter out Nones --- stripe/stripe_object.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stripe/stripe_object.py b/stripe/stripe_object.py index c2ecd7e6d..6d8c245f8 100644 --- a/stripe/stripe_object.py +++ b/stripe/stripe_object.py @@ -227,7 +227,9 @@ def refresh_from( is_dict = self._get_inner_class_is_beneath_dict(k) if is_dict: obj = { - k: util.convert_to_stripe_object( + k: None + if v is None + else util.convert_to_stripe_object( v, api_key, stripe_version, @@ -236,7 +238,6 @@ def refresh_from( inner_class, ) for k, v in v.items() - if v is not None } else: obj = util.convert_to_stripe_object(