You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As described in this issue we can use either python dot or dict notation for accessing API response values.
For the types included in the library, dot notation successfully returns the correct types:
whereas using dict notation results in everything you access being set to Any
This is fine, however there's an issue with using dot notation (also mentioned in the other issue) where calling subscription.items results in a crash because it tries to access dict's items() function instead.
This means the types can't be relied upon. It also means there's no way of using the types without people knowing they need to access items in a different way.
Is there a workaround for this? Or a fix?
To Reproduce
Use a python type checking system (we use pyright)
Try and access the plan object from a subscription response using plan = subscription.items.data[0].plan. It will crash, but the plan type will be set correctly
Instead, try accessing using plan = subscription['items']['data'][0]['plan']. It will work, but the types will be wrong.
Expected behavior
At least one of the following should be happen (ideally both):
The types should fail when accessing items using dot notation
The types should return the correct value when using dict notation
Code snippets
No response
OS
macOS
Language version
python 3.8.10
Library version
stripe-python 7.14.0
API version
2023-10-16
Additional context
No response
The text was updated successfully, but these errors were encountered:
# this _technically_ exists, but is inaccessible because it collides with dict.items(), so you have to# use the __getitem__ method to access it# items: list[StripeSubscriptionItem] # the items included in this subscription (prices live here)def__getitem__(self, item: typing.Literal["items"]) ->StripeList[SubscriptionItem]:
pass
(This comes up for SubscriptionSchedulePhase too, and possibly other places.)
In our codebase we want to use dot notation for all cases unless we are forced to use []; unfortunately for the more general case this would be much more of a PITA.
Describe the bug
As described in this issue we can use either python dot or dict notation for accessing API response values.
For the types included in the library, dot notation successfully returns the correct types:
whereas using dict notation results in everything you access being set to
Any
This is fine, however there's an issue with using dot notation (also mentioned in the other issue) where calling
subscription.items
results in a crash because it tries to access dict'sitems()
function instead.This means the types can't be relied upon. It also means there's no way of using the types without people knowing they need to access
items
in a different way.Is there a workaround for this? Or a fix?
To Reproduce
plan = subscription.items.data[0].plan
. It will crash, but the plan type will be set correctlyplan = subscription['items']['data'][0]['plan']
. It will work, but the types will be wrong.Expected behavior
At least one of the following should be happen (ideally both):
Code snippets
No response
OS
macOS
Language version
python 3.8.10
Library version
stripe-python 7.14.0
API version
2023-10-16
Additional context
No response
The text was updated successfully, but these errors were encountered: