From 7a747ba3b39bb37fbe06cd4065c341a6fbe8e703 Mon Sep 17 00:00:00 2001 From: "Alex Rattray (Stripe)" Date: Fri, 31 May 2019 18:30:29 -0400 Subject: [PATCH] Move object_classes and some imports to other files for easier codegen (#579) * Move namespaced imports into the main api_resources/__init__.py * Move object_classes to their own file for easier codegen * Cleanups per PR * Move some code around for codegen, make fmt --- stripe/__init__.py | 6 -- stripe/api_resources/__init__.py | 7 +++ stripe/object_classes.py | 85 ++++++++++++++++++++++++++ stripe/util.py | 102 +++---------------------------- 4 files changed, 99 insertions(+), 101 deletions(-) create mode 100644 stripe/object_classes.py diff --git a/stripe/__init__.py b/stripe/__init__.py index 2534ebdcc..dd7c7d82d 100644 --- a/stripe/__init__.py +++ b/stripe/__init__.py @@ -32,12 +32,6 @@ # API resources from stripe.api_resources import * # noqa -from stripe.api_resources import checkout # noqa -from stripe.api_resources import issuing # noqa -from stripe.api_resources import radar # noqa -from stripe.api_resources import reporting # noqa -from stripe.api_resources import sigma # noqa -from stripe.api_resources import terminal # noqa # OAuth from stripe.oauth import OAuth # noqa diff --git a/stripe/api_resources/__init__.py b/stripe/api_resources/__init__.py index e65b87ef1..ff3a1cae3 100644 --- a/stripe/api_resources/__init__.py +++ b/stripe/api_resources/__init__.py @@ -4,6 +4,13 @@ from stripe.api_resources.list_object import ListObject +from stripe.api_resources import checkout +from stripe.api_resources import issuing +from stripe.api_resources import radar +from stripe.api_resources import reporting +from stripe.api_resources import sigma +from stripe.api_resources import terminal + from stripe.api_resources.account import Account from stripe.api_resources.account_link import AccountLink from stripe.api_resources.alipay_account import AlipayAccount diff --git a/stripe/object_classes.py b/stripe/object_classes.py new file mode 100644 index 000000000..50b030668 --- /dev/null +++ b/stripe/object_classes.py @@ -0,0 +1,85 @@ +from __future__ import absolute_import, division, print_function + +from stripe import api_resources + + +OBJECT_CLASSES = { + # data structures + api_resources.ListObject.OBJECT_NAME: api_resources.ListObject, + # business objects + api_resources.Account.OBJECT_NAME: api_resources.Account, + api_resources.AccountLink.OBJECT_NAME: api_resources.AccountLink, + api_resources.AlipayAccount.OBJECT_NAME: api_resources.AlipayAccount, + api_resources.ApplePayDomain.OBJECT_NAME: api_resources.ApplePayDomain, + api_resources.ApplicationFee.OBJECT_NAME: api_resources.ApplicationFee, + api_resources.ApplicationFeeRefund.OBJECT_NAME: api_resources.ApplicationFeeRefund, + api_resources.Balance.OBJECT_NAME: api_resources.Balance, + api_resources.BalanceTransaction.OBJECT_NAME: api_resources.BalanceTransaction, + api_resources.BankAccount.OBJECT_NAME: api_resources.BankAccount, + api_resources.BitcoinReceiver.OBJECT_NAME: api_resources.BitcoinReceiver, + api_resources.BitcoinTransaction.OBJECT_NAME: api_resources.BitcoinTransaction, + api_resources.Capability.OBJECT_NAME: api_resources.Capability, + api_resources.Card.OBJECT_NAME: api_resources.Card, + api_resources.Charge.OBJECT_NAME: api_resources.Charge, + api_resources.checkout.Session.OBJECT_NAME: api_resources.checkout.Session, + api_resources.CountrySpec.OBJECT_NAME: api_resources.CountrySpec, + api_resources.Coupon.OBJECT_NAME: api_resources.Coupon, + api_resources.CreditNote.OBJECT_NAME: api_resources.CreditNote, + api_resources.Customer.OBJECT_NAME: api_resources.Customer, + api_resources.Dispute.OBJECT_NAME: api_resources.Dispute, + api_resources.EphemeralKey.OBJECT_NAME: api_resources.EphemeralKey, + api_resources.Event.OBJECT_NAME: api_resources.Event, + api_resources.ExchangeRate.OBJECT_NAME: api_resources.ExchangeRate, + api_resources.File.OBJECT_NAME: api_resources.File, + api_resources.File.OBJECT_NAME_ALT: api_resources.File, + api_resources.FileLink.OBJECT_NAME: api_resources.FileLink, + api_resources.Invoice.OBJECT_NAME: api_resources.Invoice, + api_resources.InvoiceItem.OBJECT_NAME: api_resources.InvoiceItem, + api_resources.InvoiceLineItem.OBJECT_NAME: api_resources.InvoiceLineItem, + api_resources.IssuerFraudRecord.OBJECT_NAME: api_resources.IssuerFraudRecord, + api_resources.issuing.Authorization.OBJECT_NAME: api_resources.issuing.Authorization, + api_resources.issuing.Card.OBJECT_NAME: api_resources.issuing.Card, + api_resources.issuing.CardDetails.OBJECT_NAME: api_resources.issuing.CardDetails, + api_resources.issuing.Cardholder.OBJECT_NAME: api_resources.issuing.Cardholder, + api_resources.issuing.Dispute.OBJECT_NAME: api_resources.issuing.Dispute, + api_resources.issuing.Transaction.OBJECT_NAME: api_resources.issuing.Transaction, + api_resources.LoginLink.OBJECT_NAME: api_resources.LoginLink, + api_resources.Order.OBJECT_NAME: api_resources.Order, + api_resources.OrderReturn.OBJECT_NAME: api_resources.OrderReturn, + api_resources.PaymentIntent.OBJECT_NAME: api_resources.PaymentIntent, + api_resources.PaymentMethod.OBJECT_NAME: api_resources.PaymentMethod, + api_resources.Payout.OBJECT_NAME: api_resources.Payout, + api_resources.Person.OBJECT_NAME: api_resources.Person, + api_resources.Plan.OBJECT_NAME: api_resources.Plan, + api_resources.Product.OBJECT_NAME: api_resources.Product, + api_resources.radar.EarlyFraudWarning.OBJECT_NAME: api_resources.radar.EarlyFraudWarning, + api_resources.radar.ValueList.OBJECT_NAME: api_resources.radar.ValueList, + api_resources.radar.ValueListItem.OBJECT_NAME: api_resources.radar.ValueListItem, + api_resources.Recipient.OBJECT_NAME: api_resources.Recipient, + api_resources.RecipientTransfer.OBJECT_NAME: api_resources.RecipientTransfer, + api_resources.Refund.OBJECT_NAME: api_resources.Refund, + api_resources.reporting.ReportRun.OBJECT_NAME: api_resources.reporting.ReportRun, + api_resources.reporting.ReportType.OBJECT_NAME: api_resources.reporting.ReportType, + api_resources.Reversal.OBJECT_NAME: api_resources.Reversal, + api_resources.Review.OBJECT_NAME: api_resources.Review, + api_resources.sigma.ScheduledQueryRun.OBJECT_NAME: api_resources.sigma.ScheduledQueryRun, + api_resources.SKU.OBJECT_NAME: api_resources.SKU, + api_resources.Source.OBJECT_NAME: api_resources.Source, + api_resources.SourceTransaction.OBJECT_NAME: api_resources.SourceTransaction, + api_resources.Subscription.OBJECT_NAME: api_resources.Subscription, + api_resources.SubscriptionItem.OBJECT_NAME: api_resources.SubscriptionItem, + api_resources.SubscriptionSchedule.OBJECT_NAME: api_resources.SubscriptionSchedule, + api_resources.SubscriptionScheduleRevision.OBJECT_NAME: api_resources.SubscriptionScheduleRevision, + api_resources.TaxId.OBJECT_NAME: api_resources.TaxId, + api_resources.TaxRate.OBJECT_NAME: api_resources.TaxRate, + api_resources.terminal.ConnectionToken.OBJECT_NAME: api_resources.terminal.ConnectionToken, + api_resources.terminal.Location.OBJECT_NAME: api_resources.terminal.Location, + api_resources.terminal.Reader.OBJECT_NAME: api_resources.terminal.Reader, + api_resources.ThreeDSecure.OBJECT_NAME: api_resources.ThreeDSecure, + api_resources.Token.OBJECT_NAME: api_resources.Token, + api_resources.Topup.OBJECT_NAME: api_resources.Topup, + api_resources.Transfer.OBJECT_NAME: api_resources.Transfer, + api_resources.UsageRecord.OBJECT_NAME: api_resources.UsageRecord, + api_resources.UsageRecordSummary.OBJECT_NAME: api_resources.UsageRecordSummary, + api_resources.WebhookEndpoint.OBJECT_NAME: api_resources.WebhookEndpoint, +} diff --git a/stripe/util.py b/stripe/util.py index e1e67b5d0..95fc336bb 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -130,106 +130,16 @@ def secure_compare(val1, val2): return result == 0 -OBJECT_CLASSES = {} - - -def load_object_classes(): +def get_object_classes(): # This is here to avoid a circular dependency - from stripe import api_resources - - global OBJECT_CLASSES - - OBJECT_CLASSES = { - # data structures - api_resources.ListObject.OBJECT_NAME: api_resources.ListObject, - # business objects - api_resources.Account.OBJECT_NAME: api_resources.Account, - api_resources.AccountLink.OBJECT_NAME: api_resources.AccountLink, - api_resources.AlipayAccount.OBJECT_NAME: api_resources.AlipayAccount, - api_resources.ApplePayDomain.OBJECT_NAME: api_resources.ApplePayDomain, - api_resources.ApplicationFee.OBJECT_NAME: api_resources.ApplicationFee, - api_resources.ApplicationFeeRefund.OBJECT_NAME: api_resources.ApplicationFeeRefund, - api_resources.Balance.OBJECT_NAME: api_resources.Balance, - api_resources.BalanceTransaction.OBJECT_NAME: api_resources.BalanceTransaction, - api_resources.BankAccount.OBJECT_NAME: api_resources.BankAccount, - api_resources.BitcoinReceiver.OBJECT_NAME: api_resources.BitcoinReceiver, - api_resources.BitcoinTransaction.OBJECT_NAME: api_resources.BitcoinTransaction, - api_resources.Capability.OBJECT_NAME: api_resources.Capability, - api_resources.Card.OBJECT_NAME: api_resources.Card, - api_resources.Charge.OBJECT_NAME: api_resources.Charge, - api_resources.checkout.Session.OBJECT_NAME: api_resources.checkout.Session, - api_resources.CountrySpec.OBJECT_NAME: api_resources.CountrySpec, - api_resources.Coupon.OBJECT_NAME: api_resources.Coupon, - api_resources.CreditNote.OBJECT_NAME: api_resources.CreditNote, - api_resources.Customer.OBJECT_NAME: api_resources.Customer, - api_resources.Dispute.OBJECT_NAME: api_resources.Dispute, - api_resources.EphemeralKey.OBJECT_NAME: api_resources.EphemeralKey, - api_resources.Event.OBJECT_NAME: api_resources.Event, - api_resources.ExchangeRate.OBJECT_NAME: api_resources.ExchangeRate, - api_resources.File.OBJECT_NAME: api_resources.File, - api_resources.File.OBJECT_NAME_ALT: api_resources.File, - api_resources.FileLink.OBJECT_NAME: api_resources.FileLink, - api_resources.Invoice.OBJECT_NAME: api_resources.Invoice, - api_resources.InvoiceItem.OBJECT_NAME: api_resources.InvoiceItem, - api_resources.InvoiceLineItem.OBJECT_NAME: api_resources.InvoiceLineItem, - api_resources.IssuerFraudRecord.OBJECT_NAME: api_resources.IssuerFraudRecord, - api_resources.issuing.Authorization.OBJECT_NAME: api_resources.issuing.Authorization, - api_resources.issuing.Card.OBJECT_NAME: api_resources.issuing.Card, - api_resources.issuing.CardDetails.OBJECT_NAME: api_resources.issuing.CardDetails, - api_resources.issuing.Cardholder.OBJECT_NAME: api_resources.issuing.Cardholder, - api_resources.issuing.Dispute.OBJECT_NAME: api_resources.issuing.Dispute, - api_resources.issuing.Transaction.OBJECT_NAME: api_resources.issuing.Transaction, - api_resources.LoginLink.OBJECT_NAME: api_resources.LoginLink, - api_resources.Order.OBJECT_NAME: api_resources.Order, - api_resources.OrderReturn.OBJECT_NAME: api_resources.OrderReturn, - api_resources.PaymentIntent.OBJECT_NAME: api_resources.PaymentIntent, - api_resources.PaymentMethod.OBJECT_NAME: api_resources.PaymentMethod, - api_resources.Payout.OBJECT_NAME: api_resources.Payout, - api_resources.Person.OBJECT_NAME: api_resources.Person, - api_resources.Plan.OBJECT_NAME: api_resources.Plan, - api_resources.Product.OBJECT_NAME: api_resources.Product, - api_resources.radar.EarlyFraudWarning.OBJECT_NAME: api_resources.radar.EarlyFraudWarning, - api_resources.radar.ValueList.OBJECT_NAME: api_resources.radar.ValueList, - api_resources.radar.ValueListItem.OBJECT_NAME: api_resources.radar.ValueListItem, - api_resources.Recipient.OBJECT_NAME: api_resources.Recipient, - api_resources.RecipientTransfer.OBJECT_NAME: api_resources.RecipientTransfer, - api_resources.Refund.OBJECT_NAME: api_resources.Refund, - api_resources.reporting.ReportRun.OBJECT_NAME: api_resources.reporting.ReportRun, - api_resources.reporting.ReportType.OBJECT_NAME: api_resources.reporting.ReportType, - api_resources.Reversal.OBJECT_NAME: api_resources.Reversal, - api_resources.Review.OBJECT_NAME: api_resources.Review, - api_resources.sigma.ScheduledQueryRun.OBJECT_NAME: api_resources.sigma.ScheduledQueryRun, - api_resources.SKU.OBJECT_NAME: api_resources.SKU, - api_resources.Source.OBJECT_NAME: api_resources.Source, - api_resources.SourceTransaction.OBJECT_NAME: api_resources.SourceTransaction, - api_resources.Subscription.OBJECT_NAME: api_resources.Subscription, - api_resources.SubscriptionItem.OBJECT_NAME: api_resources.SubscriptionItem, - api_resources.SubscriptionSchedule.OBJECT_NAME: api_resources.SubscriptionSchedule, - api_resources.SubscriptionScheduleRevision.OBJECT_NAME: api_resources.SubscriptionScheduleRevision, - api_resources.TaxId.OBJECT_NAME: api_resources.TaxId, - api_resources.TaxRate.OBJECT_NAME: api_resources.TaxRate, - api_resources.ThreeDSecure.OBJECT_NAME: api_resources.ThreeDSecure, - api_resources.Token.OBJECT_NAME: api_resources.Token, - api_resources.Topup.OBJECT_NAME: api_resources.Topup, - api_resources.Transfer.OBJECT_NAME: api_resources.Transfer, - api_resources.UsageRecord.OBJECT_NAME: api_resources.UsageRecord, - api_resources.UsageRecordSummary.OBJECT_NAME: api_resources.UsageRecordSummary, - api_resources.WebhookEndpoint.OBJECT_NAME: api_resources.WebhookEndpoint, - api_resources.terminal.Location.OBJECT_NAME: api_resources.terminal.Location, - api_resources.terminal.ConnectionToken.OBJECT_NAME: api_resources.terminal.ConnectionToken, - api_resources.terminal.Reader.OBJECT_NAME: api_resources.terminal.Reader, - } + from stripe.object_classes import OBJECT_CLASSES + + return OBJECT_CLASSES def convert_to_stripe_object( resp, api_key=None, stripe_version=None, stripe_account=None ): - global OBJECT_CLASSES - - if not OBJECT_CLASSES: - load_object_classes() - types = OBJECT_CLASSES.copy() - # If we get a StripeResponse, we'll want to return a # StripeObject with the last_response field filled out with # the raw API response information @@ -252,7 +162,9 @@ def convert_to_stripe_object( resp = resp.copy() klass_name = resp.get("object") if isinstance(klass_name, six.string_types): - klass = types.get(klass_name, stripe.stripe_object.StripeObject) + klass = get_object_classes().get( + klass_name, stripe.stripe_object.StripeObject + ) else: klass = stripe.stripe_object.StripeObject