1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
|
# -*- coding: utf-8 -*-
import json
from collections import OrderedDict
from stripe import (
DEFAULT_API_BASE,
DEFAULT_CONNECT_API_BASE,
DEFAULT_UPLOAD_API_BASE,
DEFAULT_METER_EVENTS_API_BASE,
)
from stripe._api_mode import ApiMode
from stripe._error import AuthenticationError
from stripe._api_requestor import _APIRequestor
from stripe._request_options import extract_options_from_dict
from stripe._requestor_options import RequestorOptions, BaseAddresses
from stripe._client_options import _ClientOptions
from stripe._http_client import (
HTTPClient,
new_default_http_client,
new_http_client_async_fallback,
)
from stripe._api_version import _ApiVersion
from stripe._stripe_object import StripeObject
from stripe._stripe_response import StripeResponse
from stripe._util import _convert_to_stripe_object, get_api_mode
from stripe._webhook import Webhook, WebhookSignature
from stripe._event import Event
from stripe.v2._event import ThinEvent
from typing import Any, Dict, Optional, Union, cast
# Non-generated services
from stripe._oauth_service import OAuthService
# services: The beginning of the section generated from our OpenAPI spec
from stripe._account_service import AccountService
from stripe._account_link_service import AccountLinkService
from stripe._account_session_service import AccountSessionService
from stripe._apple_pay_domain_service import ApplePayDomainService
from stripe._application_fee_service import ApplicationFeeService
from stripe._apps_service import AppsService
from stripe._balance_service import BalanceService
from stripe._balance_transaction_service import BalanceTransactionService
from stripe._billing_service import BillingService
from stripe._billing_portal_service import BillingPortalService
from stripe._charge_service import ChargeService
from stripe._checkout_service import CheckoutService
from stripe._climate_service import ClimateService
from stripe._confirmation_token_service import ConfirmationTokenService
from stripe._test_helpers_service import TestHelpersService
from stripe._country_spec_service import CountrySpecService
from stripe._coupon_service import CouponService
from stripe._credit_note_service import CreditNoteService
from stripe._customer_service import CustomerService
from stripe._customer_session_service import CustomerSessionService
from stripe._dispute_service import DisputeService
from stripe._entitlements_service import EntitlementsService
from stripe._ephemeral_key_service import EphemeralKeyService
from stripe._event_service import EventService
from stripe._exchange_rate_service import ExchangeRateService
from stripe._file_service import FileService
from stripe._file_link_service import FileLinkService
from stripe._financial_connections_service import FinancialConnectionsService
from stripe._forwarding_service import ForwardingService
from stripe._identity_service import IdentityService
from stripe._invoice_service import InvoiceService
from stripe._invoice_payment_service import InvoicePaymentService
from stripe._invoice_rendering_template_service import (
InvoiceRenderingTemplateService,
)
from stripe._invoice_item_service import InvoiceItemService
from stripe._issuing_service import IssuingService
from stripe._mandate_service import MandateService
from stripe._payment_intent_service import PaymentIntentService
from stripe._payment_link_service import PaymentLinkService
from stripe._payment_method_service import PaymentMethodService
from stripe._payment_method_configuration_service import (
PaymentMethodConfigurationService,
)
from stripe._payment_method_domain_service import PaymentMethodDomainService
from stripe._payout_service import PayoutService
from stripe._plan_service import PlanService
from stripe._price_service import PriceService
from stripe._product_service import ProductService
from stripe._promotion_code_service import PromotionCodeService
from stripe._quote_service import QuoteService
from stripe._radar_service import RadarService
from stripe._refund_service import RefundService
from stripe._reporting_service import ReportingService
from stripe._review_service import ReviewService
from stripe._sigma_service import SigmaService
from stripe._setup_attempt_service import SetupAttemptService
from stripe._setup_intent_service import SetupIntentService
from stripe._shipping_rate_service import ShippingRateService
from stripe._source_service import SourceService
from stripe._subscription_service import SubscriptionService
from stripe._subscription_item_service import SubscriptionItemService
from stripe._subscription_schedule_service import SubscriptionScheduleService
from stripe._tax_service import TaxService
from stripe._tax_code_service import TaxCodeService
from stripe._tax_id_service import TaxIdService
from stripe._tax_rate_service import TaxRateService
from stripe._terminal_service import TerminalService
from stripe._token_service import TokenService
from stripe._topup_service import TopupService
from stripe._transfer_service import TransferService
from stripe._treasury_service import TreasuryService
from stripe._webhook_endpoint_service import WebhookEndpointService
from stripe._v2_services import V2Services
# services: The end of the section generated from our OpenAPI spec
class StripeClient(object):
def __init__(
self,
api_key: str,
*,
stripe_account: Optional[str] = None,
stripe_context: Optional[str] = None,
stripe_version: Optional[str] = None,
base_addresses: BaseAddresses = {},
client_id: Optional[str] = None,
verify_ssl_certs: bool = True,
proxy: Optional[str] = None,
max_network_retries: Optional[int] = None,
http_client: Optional[HTTPClient] = None,
):
# The types forbid this, but let's give users without types a friendly error.
if api_key is None: # pyright: ignore[reportUnnecessaryComparison]
raise AuthenticationError(
"No API key provided. (HINT: set your API key using "
'"client = stripe.StripeClient(<API-KEY>)"). You can '
"generate API keys from the Stripe web interface. "
"See https://stripe.com/api for details, or email "
"support@stripe.com if you have any questions."
)
if http_client and (proxy or verify_ssl_certs is not True):
raise ValueError(
"You cannot specify `proxy` or `verify_ssl_certs` when passing "
"in a custom `http_client`. Please set these values on your "
"custom `http_client` instead."
)
# Default to stripe.DEFAULT_API_BASE, stripe.DEFAULT_CONNECT_API_BASE,
# and stripe.DEFAULT_UPLOAD_API_BASE if not set in base_addresses.
base_addresses = {
"api": DEFAULT_API_BASE,
"connect": DEFAULT_CONNECT_API_BASE,
"files": DEFAULT_UPLOAD_API_BASE,
"meter_events": DEFAULT_METER_EVENTS_API_BASE,
**base_addresses,
}
requestor_options = RequestorOptions(
api_key=api_key,
stripe_account=stripe_account,
stripe_context=stripe_context,
stripe_version=stripe_version or _ApiVersion.CURRENT,
base_addresses=base_addresses,
max_network_retries=max_network_retries,
)
if http_client is None:
http_client = new_default_http_client(
async_fallback_client=new_http_client_async_fallback(
proxy=proxy, verify_ssl_certs=verify_ssl_certs
),
proxy=proxy,
verify_ssl_certs=verify_ssl_certs,
)
self._requestor = _APIRequestor(
options=requestor_options,
client=http_client,
)
self._options = _ClientOptions(
client_id=client_id,
proxy=proxy,
verify_ssl_certs=verify_ssl_certs,
)
self.oauth = OAuthService(self._requestor, self._options)
# top-level services: The beginning of the section generated from our OpenAPI spec
self.accounts = AccountService(self._requestor)
self.account_links = AccountLinkService(self._requestor)
self.account_sessions = AccountSessionService(self._requestor)
self.apple_pay_domains = ApplePayDomainService(self._requestor)
self.application_fees = ApplicationFeeService(self._requestor)
self.apps = AppsService(self._requestor)
self.balance = BalanceService(self._requestor)
self.balance_transactions = BalanceTransactionService(self._requestor)
self.billing = BillingService(self._requestor)
self.billing_portal = BillingPortalService(self._requestor)
self.charges = ChargeService(self._requestor)
self.checkout = CheckoutService(self._requestor)
self.climate = ClimateService(self._requestor)
self.confirmation_tokens = ConfirmationTokenService(self._requestor)
self.test_helpers = TestHelpersService(self._requestor)
self.country_specs = CountrySpecService(self._requestor)
self.coupons = CouponService(self._requestor)
self.credit_notes = CreditNoteService(self._requestor)
self.customers = CustomerService(self._requestor)
self.customer_sessions = CustomerSessionService(self._requestor)
self.disputes = DisputeService(self._requestor)
self.entitlements = EntitlementsService(self._requestor)
self.ephemeral_keys = EphemeralKeyService(self._requestor)
self.events = EventService(self._requestor)
self.exchange_rates = ExchangeRateService(self._requestor)
self.files = FileService(self._requestor)
self.file_links = FileLinkService(self._requestor)
self.financial_connections = FinancialConnectionsService(
self._requestor
)
self.forwarding = ForwardingService(self._requestor)
self.identity = IdentityService(self._requestor)
self.invoices = InvoiceService(self._requestor)
self.invoice_payments = InvoicePaymentService(self._requestor)
self.invoice_rendering_templates = InvoiceRenderingTemplateService(
self._requestor,
)
self.invoice_items = InvoiceItemService(self._requestor)
self.issuing = IssuingService(self._requestor)
self.mandates = MandateService(self._requestor)
self.payment_intents = PaymentIntentService(self._requestor)
self.payment_links = PaymentLinkService(self._requestor)
self.payment_methods = PaymentMethodService(self._requestor)
self.payment_method_configurations = PaymentMethodConfigurationService(
self._requestor,
)
self.payment_method_domains = PaymentMethodDomainService(
self._requestor
)
self.payouts = PayoutService(self._requestor)
self.plans = PlanService(self._requestor)
self.prices = PriceService(self._requestor)
self.products = ProductService(self._requestor)
self.promotion_codes = PromotionCodeService(self._requestor)
self.quotes = QuoteService(self._requestor)
self.radar = RadarService(self._requestor)
self.refunds = RefundService(self._requestor)
self.reporting = ReportingService(self._requestor)
self.reviews = ReviewService(self._requestor)
self.sigma = SigmaService(self._requestor)
self.setup_attempts = SetupAttemptService(self._requestor)
self.setup_intents = SetupIntentService(self._requestor)
self.shipping_rates = ShippingRateService(self._requestor)
self.sources = SourceService(self._requestor)
self.subscriptions = SubscriptionService(self._requestor)
self.subscription_items = SubscriptionItemService(self._requestor)
self.subscription_schedules = SubscriptionScheduleService(
self._requestor
)
self.tax = TaxService(self._requestor)
self.tax_codes = TaxCodeService(self._requestor)
self.tax_ids = TaxIdService(self._requestor)
self.tax_rates = TaxRateService(self._requestor)
self.terminal = TerminalService(self._requestor)
self.tokens = TokenService(self._requestor)
self.topups = TopupService(self._requestor)
self.transfers = TransferService(self._requestor)
self.treasury = TreasuryService(self._requestor)
self.webhook_endpoints = WebhookEndpointService(self._requestor)
self.v2 = V2Services(self._requestor)
# top-level services: The end of the section generated from our OpenAPI spec
def parse_thin_event(
self,
raw: Union[bytes, str, bytearray],
sig_header: str,
secret: str,
tolerance: int = Webhook.DEFAULT_TOLERANCE,
) -> ThinEvent:
payload = (
cast(Union[bytes, bytearray], raw).decode("utf-8")
if hasattr(raw, "decode")
else cast(str, raw)
)
WebhookSignature.verify_header(payload, sig_header, secret, tolerance)
return ThinEvent(payload)
def construct_event(
self,
payload: Union[bytes, str],
sig_header: str,
secret: str,
tolerance: int = Webhook.DEFAULT_TOLERANCE,
) -> Event:
if hasattr(payload, "decode"):
payload = cast(bytes, payload).decode("utf-8")
WebhookSignature.verify_header(payload, sig_header, secret, tolerance)
data = json.loads(payload, object_pairs_hook=OrderedDict)
event = Event._construct_from(
values=data,
requestor=self._requestor,
api_mode="V1",
)
return event
def raw_request(self, method_: str, url_: str, **params):
params = params.copy()
options, params = extract_options_from_dict(params)
api_mode = get_api_mode(url_)
base_address = params.pop("base", "api")
stripe_context = params.pop("stripe_context", None)
# stripe-context goes *here* and not in api_requestor. Properties
# go on api_requestor when you want them to persist onto requests
# made when you call instance methods on APIResources that come from
# the first request. No need for that here, as we aren't deserializing APIResources
if stripe_context is not None:
options["headers"] = options.get("headers", {})
assert isinstance(options["headers"], dict)
options["headers"].update({"Stripe-Context": stripe_context})
rbody, rcode, rheaders = self._requestor.request_raw(
method_,
url_,
params=params,
options=options,
base_address=base_address,
api_mode=api_mode,
usage=["raw_request"],
)
return self._requestor._interpret_response(
rbody, rcode, rheaders, api_mode
)
async def raw_request_async(self, method_: str, url_: str, **params):
params = params.copy()
options, params = extract_options_from_dict(params)
api_mode = get_api_mode(url_)
base_address = params.pop("base", "api")
rbody, rcode, rheaders = await self._requestor.request_raw_async(
method_,
url_,
params=params,
options=options,
base_address=base_address,
api_mode=api_mode,
usage=["raw_request"],
)
return self._requestor._interpret_response(
rbody, rcode, rheaders, api_mode
)
def deserialize(
self,
resp: Union[StripeResponse, Dict[str, Any]],
params: Optional[Dict[str, Any]] = None,
*,
api_mode: ApiMode,
) -> StripeObject:
return _convert_to_stripe_object(
resp=resp,
params=params,
requestor=self._requestor,
api_mode=api_mode,
)
|