diff --git a/stubs/stripe/@tests/stubtest_allowlist.txt b/stubs/stripe/@tests/stubtest_allowlist.txt index e58e34427659..e4ac4827b317 100644 --- a/stubs/stripe/@tests/stubtest_allowlist.txt +++ b/stubs/stripe/@tests/stubtest_allowlist.txt @@ -1,3 +1,5 @@ # The following methods have custom classmethod decorators stripe\..*\.delete stripe\..*PaymentIntent\.confirm +stripe\.api_resources\..*\.SearchableAPIResource\.search # Not defined on the actual class in v3, but expected to exist. +stripe\.api_resources\..*\.SearchableAPIResource\.search_auto_paging_iter # Not defined on the actual class in v3, but expected to exist. diff --git a/stubs/stripe/stripe/api_resources/__init__.pyi b/stubs/stripe/stripe/api_resources/__init__.pyi index 0226e34c139a..77cdcbd11087 100644 --- a/stubs/stripe/stripe/api_resources/__init__.pyi +++ b/stubs/stripe/stripe/api_resources/__init__.pyi @@ -58,6 +58,7 @@ from stripe.api_resources.recipient_transfer import RecipientTransfer as Recipie from stripe.api_resources.refund import Refund as Refund from stripe.api_resources.reversal import Reversal as Reversal from stripe.api_resources.review import Review as Review +from stripe.api_resources.search_result_object import SearchResultObject as SearchResultObject from stripe.api_resources.setup_attempt import SetupAttempt as SetupAttempt from stripe.api_resources.setup_intent import SetupIntent as SetupIntent from stripe.api_resources.sku import SKU as SKU diff --git a/stubs/stripe/stripe/api_resources/abstract/__init__.pyi b/stubs/stripe/stripe/api_resources/abstract/__init__.pyi index a3d77265cb2c..f73b09fd6442 100644 --- a/stubs/stripe/stripe/api_resources/abstract/__init__.pyi +++ b/stubs/stripe/stripe/api_resources/abstract/__init__.pyi @@ -6,6 +6,7 @@ from stripe.api_resources.abstract.listable_api_resource import ListableAPIResou from stripe.api_resources.abstract.nested_resource_class_methods import ( nested_resource_class_methods as nested_resource_class_methods, ) +from stripe.api_resources.abstract.searchable_api_resource import SearchableAPIResource as SearchableAPIResource from stripe.api_resources.abstract.singleton_api_resource import SingletonAPIResource as SingletonAPIResource from stripe.api_resources.abstract.updateable_api_resource import UpdateableAPIResource as UpdateableAPIResource from stripe.api_resources.abstract.verify_mixin import VerifyMixin as VerifyMixin diff --git a/stubs/stripe/stripe/api_resources/abstract/searchable_api_resource.pyi b/stubs/stripe/stripe/api_resources/abstract/searchable_api_resource.pyi new file mode 100644 index 000000000000..e8cf8ce998dd --- /dev/null +++ b/stubs/stripe/stripe/api_resources/abstract/searchable_api_resource.pyi @@ -0,0 +1,11 @@ +from _typeshed import Self +from collections.abc import Iterator + +from stripe.api_resources.abstract.api_resource import APIResource as APIResource +from stripe.api_resources.search_result_object import SearchResultObject + +class SearchableAPIResource(APIResource): + @classmethod + def search(cls: type[Self], *args: str | None, **kwargs) -> SearchResultObject[Self]: ... + @classmethod + def search_auto_paging_iter(cls: type[Self], *args: str | None, **kwargs) -> Iterator[Self]: ... diff --git a/stubs/stripe/stripe/api_resources/charge.pyi b/stubs/stripe/stripe/api_resources/charge.pyi index 163793340cf7..a9c6246683ec 100644 --- a/stubs/stripe/stripe/api_resources/charge.pyi +++ b/stubs/stripe/stripe/api_resources/charge.pyi @@ -2,11 +2,12 @@ from stripe import api_requestor as api_requestor from stripe.api_resources.abstract import ( CreateableAPIResource as CreateableAPIResource, ListableAPIResource as ListableAPIResource, + SearchableAPIResource as SearchableAPIResource, UpdateableAPIResource as UpdateableAPIResource, custom_method as custom_method, ) -class Charge(CreateableAPIResource, ListableAPIResource, UpdateableAPIResource): +class Charge(CreateableAPIResource, ListableAPIResource, SearchableAPIResource, UpdateableAPIResource): OBJECT_NAME: str def capture(self, idempotency_key: str | None = ..., **params): ... def refund(self, idempotency_key: str | None = ..., **params): ... diff --git a/stubs/stripe/stripe/api_resources/customer.pyi b/stubs/stripe/stripe/api_resources/customer.pyi index 4010c7a5c2be..36e3327d99be 100644 --- a/stubs/stripe/stripe/api_resources/customer.pyi +++ b/stubs/stripe/stripe/api_resources/customer.pyi @@ -3,12 +3,13 @@ from stripe.api_resources.abstract import ( CreateableAPIResource as CreateableAPIResource, DeletableAPIResource as DeletableAPIResource, ListableAPIResource as ListableAPIResource, + SearchableAPIResource as SearchableAPIResource, UpdateableAPIResource as UpdateableAPIResource, custom_method as custom_method, nested_resource_class_methods as nested_resource_class_methods, ) -class Customer(CreateableAPIResource, DeletableAPIResource, ListableAPIResource, UpdateableAPIResource): +class Customer(CreateableAPIResource, DeletableAPIResource, ListableAPIResource, SearchableAPIResource, UpdateableAPIResource): OBJECT_NAME: str def delete_discount(self, **params) -> None: ... @classmethod diff --git a/stubs/stripe/stripe/api_resources/invoice.pyi b/stubs/stripe/stripe/api_resources/invoice.pyi index 4aa742c99f5d..8c994d015e2f 100644 --- a/stubs/stripe/stripe/api_resources/invoice.pyi +++ b/stubs/stripe/stripe/api_resources/invoice.pyi @@ -6,11 +6,12 @@ from stripe.api_resources.abstract import ( CreateableAPIResource as CreateableAPIResource, DeletableAPIResource as DeletableAPIResource, ListableAPIResource as ListableAPIResource, + SearchableAPIResource as SearchableAPIResource, UpdateableAPIResource as UpdateableAPIResource, custom_method as custom_method, ) -class Invoice(CreateableAPIResource, DeletableAPIResource, ListableAPIResource, UpdateableAPIResource): +class Invoice(CreateableAPIResource, DeletableAPIResource, ListableAPIResource, SearchableAPIResource, UpdateableAPIResource): OBJECT_NAME: str def finalize_invoice(self: Self, idempotency_key: str | None = ..., **params) -> Self: ... def mark_uncollectible(self: Self, idempotency_key: str | None = ..., **params) -> Self: ... diff --git a/stubs/stripe/stripe/api_resources/payment_intent.pyi b/stubs/stripe/stripe/api_resources/payment_intent.pyi index c644747a07a8..203ce28f9308 100644 --- a/stubs/stripe/stripe/api_resources/payment_intent.pyi +++ b/stubs/stripe/stripe/api_resources/payment_intent.pyi @@ -3,11 +3,12 @@ from typing import overload from stripe.api_resources.abstract import ( CreateableAPIResource as CreateableAPIResource, ListableAPIResource as ListableAPIResource, + SearchableAPIResource as SearchableAPIResource, UpdateableAPIResource as UpdateableAPIResource, custom_method as custom_method, ) -class PaymentIntent(CreateableAPIResource, ListableAPIResource, UpdateableAPIResource): +class PaymentIntent(CreateableAPIResource, ListableAPIResource, SearchableAPIResource, UpdateableAPIResource): OBJECT_NAME: str def cancel(self, idempotency_key: str | None = ..., **params): ... def capture(self, idempotency_key: str | None = ..., **params): ... diff --git a/stubs/stripe/stripe/api_resources/price.pyi b/stubs/stripe/stripe/api_resources/price.pyi index 7c1c73688724..773254d0a23e 100644 --- a/stubs/stripe/stripe/api_resources/price.pyi +++ b/stubs/stripe/stripe/api_resources/price.pyi @@ -1,8 +1,9 @@ from stripe.api_resources.abstract import ( CreateableAPIResource as CreateableAPIResource, ListableAPIResource as ListableAPIResource, + SearchableAPIResource as SearchableAPIResource, UpdateableAPIResource as UpdateableAPIResource, ) -class Price(CreateableAPIResource, ListableAPIResource, UpdateableAPIResource): +class Price(CreateableAPIResource, ListableAPIResource, SearchableAPIResource, UpdateableAPIResource): OBJECT_NAME: str diff --git a/stubs/stripe/stripe/api_resources/product.pyi b/stubs/stripe/stripe/api_resources/product.pyi index 8e42ea069d5c..10149e003d39 100644 --- a/stubs/stripe/stripe/api_resources/product.pyi +++ b/stubs/stripe/stripe/api_resources/product.pyi @@ -2,8 +2,9 @@ from stripe.api_resources.abstract import ( CreateableAPIResource as CreateableAPIResource, DeletableAPIResource as DeletableAPIResource, ListableAPIResource as ListableAPIResource, + SearchableAPIResource as SearchableAPIResource, UpdateableAPIResource as UpdateableAPIResource, ) -class Product(CreateableAPIResource, DeletableAPIResource, ListableAPIResource, UpdateableAPIResource): +class Product(CreateableAPIResource, DeletableAPIResource, ListableAPIResource, SearchableAPIResource, UpdateableAPIResource): OBJECT_NAME: str diff --git a/stubs/stripe/stripe/api_resources/search_result_object.pyi b/stubs/stripe/stripe/api_resources/search_result_object.pyi new file mode 100644 index 000000000000..f6b858c27def --- /dev/null +++ b/stubs/stripe/stripe/api_resources/search_result_object.pyi @@ -0,0 +1,33 @@ +from _typeshed import Self +from collections.abc import Iterator +from typing import Any, ClassVar, Generic, TypeVar +from typing_extensions import Literal + +from stripe.stripe_object import StripeObject + +_T = TypeVar("_T") + +class SearchResultObject(StripeObject, Generic[_T]): + OBJECT_NAME: ClassVar[Literal["search_result"]] + url: str + has_more: bool + data: list[_T] + next_page: str + total_count: int + + def search( + self: Self, api_key: str | None = ..., stripe_version: str | None = ..., stripe_account: str | None = ..., **params + ) -> Self: ... + def __getitem__(self, k: str) -> Any: ... + def __iter__(self) -> Iterator[_T]: ... + def __len__(self) -> int: ... + def auto_paging_iter(self) -> Iterator[_T]: ... + @classmethod + def empty_search_result( + cls: type[Self], api_key: str | None = ..., stripe_version: str | None = ..., stripe_account: str | None = ... + ) -> Self: ... + @property + def is_empty(self) -> bool: ... + def next_search_result_page( + self: Self, api_key: str | None = ..., stripe_version: str | None = ..., stripe_account: str | None = ..., **params + ) -> Self: ... diff --git a/stubs/stripe/stripe/api_resources/subscription.pyi b/stubs/stripe/stripe/api_resources/subscription.pyi index ddd2ce49b9f4..511d2aefe282 100644 --- a/stubs/stripe/stripe/api_resources/subscription.pyi +++ b/stubs/stripe/stripe/api_resources/subscription.pyi @@ -3,10 +3,13 @@ from stripe.api_resources.abstract import ( CreateableAPIResource as CreateableAPIResource, DeletableAPIResource as DeletableAPIResource, ListableAPIResource as ListableAPIResource, + SearchableAPIResource as SearchableAPIResource, UpdateableAPIResource as UpdateableAPIResource, custom_method as custom_method, ) -class Subscription(CreateableAPIResource, DeletableAPIResource, ListableAPIResource, UpdateableAPIResource): +class Subscription( + CreateableAPIResource, DeletableAPIResource, ListableAPIResource, SearchableAPIResource, UpdateableAPIResource +): OBJECT_NAME: str def delete_discount(self, **params) -> None: ...