From 198d78a7445650eee6ebb300e345b2773b0524ec Mon Sep 17 00:00:00 2001 From: Alex Rattray Date: Wed, 22 May 2019 18:16:28 -0400 Subject: [PATCH 1/4] Move namespaced imports into the main api_resources/__init__.py --- stripe/__init__.py | 6 ------ stripe/api_resources/__init__.py | 7 +++++++ 2 files changed, 7 insertions(+), 6 deletions(-) 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 From a5e958e6d3de6bf3501cc4219c47f9996c6f1a6b Mon Sep 17 00:00:00 2001 From: Alex Rattray Date: Fri, 31 May 2019 14:58:40 -0400 Subject: [PATCH 2/4] Move object_classes to their own file for easier codegen --- stripe/object_classes.py | 85 ++++++++++++++++++++++++++++++++++ stripe/util.py | 99 ++++------------------------------------ 2 files changed, 93 insertions(+), 91 deletions(-) create mode 100644 stripe/object_classes.py diff --git a/stripe/object_classes.py b/stripe/object_classes.py new file mode 100644 index 000000000..bd85c5350 --- /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.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, +} diff --git a/stripe/util.py b/stripe/util.py index e1e67b5d0..daf734f4b 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -130,105 +130,22 @@ def secure_compare(val1, val2): return result == 0 -OBJECT_CLASSES = {} +# DEPRECATED +def load_object_classes(): + get_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() + # Can we remove this copy? + types = get_object_classes().copy() # If we get a StripeResponse, we'll want to return a # StripeObject with the last_response field filled out with From 9365f4aa72e9684962407ad3ddc92143e3f7ceaf Mon Sep 17 00:00:00 2001 From: Alex Rattray Date: Fri, 31 May 2019 15:53:40 -0400 Subject: [PATCH 3/4] Cleanups per PR --- stripe/util.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/stripe/util.py b/stripe/util.py index daf734f4b..ebff97efe 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -130,11 +130,6 @@ def secure_compare(val1, val2): return result == 0 -# DEPRECATED -def load_object_classes(): - get_object_classes() - - def get_object_classes(): # This is here to avoid a circular dependency from stripe.object_classes import OBJECT_CLASSES @@ -144,9 +139,6 @@ def get_object_classes(): def convert_to_stripe_object( resp, api_key=None, stripe_version=None, stripe_account=None ): - # Can we remove this copy? - types = get_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 @@ -169,7 +161,7 @@ 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 From 96e23710c045e782e34bc77c4f2c1d9da27cb6c3 Mon Sep 17 00:00:00 2001 From: Alex Rattray Date: Fri, 31 May 2019 18:03:57 -0400 Subject: [PATCH 4/4] Move some code around for codegen, make fmt --- stripe/object_classes.py | 6 +++--- stripe/util.py | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/stripe/object_classes.py b/stripe/object_classes.py index bd85c5350..50b030668 100644 --- a/stripe/object_classes.py +++ b/stripe/object_classes.py @@ -72,6 +72,9 @@ 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, @@ -79,7 +82,4 @@ 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, } diff --git a/stripe/util.py b/stripe/util.py index ebff97efe..95fc336bb 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -133,6 +133,7 @@ def secure_compare(val1, val2): def get_object_classes(): # This is here to avoid a circular dependency from stripe.object_classes import OBJECT_CLASSES + return OBJECT_CLASSES @@ -161,7 +162,9 @@ def convert_to_stripe_object( resp = resp.copy() klass_name = resp.get("object") if isinstance(klass_name, six.string_types): - klass = get_object_classes().get(klass_name, stripe.stripe_object.StripeObject) + klass = get_object_classes().get( + klass_name, stripe.stripe_object.StripeObject + ) else: klass = stripe.stripe_object.StripeObject