Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Like #1061, but merging into master now.
Replaces StripeObject types on resource classes with more granular classes that define the specific fields that can be accessed.
This is not just a type annotation change. We also change the deserialization code in StripeObject.refresh_from and util.convert_to_stripe_object so, in order that the type annotations tell the truth, at runtime, these StripeObject classes will be instances of the more specific classes that are children of StripeObject.
We don't consider changing objects to a more specific subclass to be a breaking change, however, it's possible that any code that uses type(...) == StripeObject instead of instanceof(StripeObject, ...), or does similar introspection, will be affected by this change,
Into beta for now.
Note: There is a very obscure breaking change here: PromotionCode.restrictions.currency_options will now be of type dict instead of StripeObject.