Skip to content

Commit

Permalink
Generate nested resource classes
Browse files Browse the repository at this point in the history
  • Loading branch information
richardm-stripe committed Oct 11, 2023
1 parent 140bfd7 commit 28c5650
Show file tree
Hide file tree
Showing 101 changed files with 15,957 additions and 541 deletions.
470 changes: 461 additions & 9 deletions stripe/api_resources/account.py

Large diffs are not rendered by default.

48 changes: 47 additions & 1 deletion stripe/api_resources/account_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand All @@ -46,3 +90,5 @@ def create(
params,
),
)

_inner_class_types = {"components": Components}
9 changes: 8 additions & 1 deletion stripe/api_resources/apps/secret.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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(
Expand Down Expand Up @@ -114,3 +119,5 @@ def list(
)

return result

_inner_class_types = {"scope": Scope}
78 changes: 73 additions & 5 deletions stripe/api_resources/balance.py
Original file line number Diff line number Diff line change
Expand Up @@ -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":
Expand All @@ -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,
}
12 changes: 11 additions & 1 deletion stripe/api_resources/balance_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,22 @@ 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
currency: str
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"]
Expand Down Expand Up @@ -105,3 +113,5 @@ def retrieve(
instance = cls(id, api_key, **params)
instance.refresh()
return instance

_inner_class_types = {"fee_details": FeeDetail}
142 changes: 140 additions & 2 deletions stripe/api_resources/bank_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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]]
Expand Down Expand Up @@ -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,
}
Loading

0 comments on commit 28c5650

Please sign in to comment.