From 2c988fdb653a808d93c27b06a2897f49fd97c8cc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 03:56:33 +0000 Subject: [PATCH 1/4] feat(api): api update --- .stats.yml | 8 +- api.md | 1 + src/increase/resources/documents.py | 122 ++++++++++++++++++- src/increase/types/__init__.py | 1 + src/increase/types/document.py | 10 +- src/increase/types/document_create_params.py | 30 +++++ tests/api_resources/test_documents.py | 86 ++++++++++++- 7 files changed, 250 insertions(+), 8 deletions(-) create mode 100644 src/increase/types/document_create_params.py diff --git a/.stats.yml b/.stats.yml index 8953883b1..43c250262 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 196 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-68bbd789dfbd107f02c29239ae129a21d004842700dea205f234136ac27352eb.yml -openapi_spec_hash: 7692e2b2d4fdeac7ff58b07c9d8fef2c -config_hash: c4ca49f6bac6268578b0734a33a9d1fd +configured_endpoints: 197 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-b9a610bb578b82c46d4222f4746d69c8e422f9cfad51a6d72d44c64f8746d709.yml +openapi_spec_hash: a63cc36300445b0201442108b6cc8530 +config_hash: 85850cd9055db4b9e43bcc4aa1a2dcea diff --git a/api.md b/api.md index 1d07c6adb..80ca6056e 100644 --- a/api.md +++ b/api.md @@ -528,6 +528,7 @@ from increase.types import Document Methods: +- client.documents.create(\*\*params) -> Document - client.documents.retrieve(document_id) -> Document - client.documents.list(\*\*params) -> SyncPage[Document] diff --git a/src/increase/resources/documents.py b/src/increase/resources/documents.py index 298b3737b..f83829f62 100644 --- a/src/increase/resources/documents.py +++ b/src/increase/resources/documents.py @@ -2,11 +2,13 @@ from __future__ import annotations +from typing_extensions import Literal + import httpx -from ..types import document_list_params +from ..types import document_list_params, document_create_params from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven -from .._utils import maybe_transform +from .._utils import maybe_transform, async_maybe_transform from .._compat import cached_property from .._resource import SyncAPIResource, AsyncAPIResource from .._response import ( @@ -42,6 +44,58 @@ def with_streaming_response(self) -> DocumentsResourceWithStreamingResponse: """ return DocumentsResourceWithStreamingResponse(self) + def create( + self, + *, + category: Literal["account_verification_letter"], + account_verification_letter: document_create_params.AccountVerificationLetter | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + idempotency_key: str | None = None, + ) -> Document: + """ + Create a Document + + Args: + category: The type of document to create. + + - `account_verification_letter` - An account verification letter. + + account_verification_letter: An account verification letter. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + return self._post( + "/documents", + body=maybe_transform( + { + "category": category, + "account_verification_letter": account_verification_letter, + }, + document_create_params.DocumentCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=Document, + ) + def retrieve( self, document_id: str, @@ -161,6 +215,58 @@ def with_streaming_response(self) -> AsyncDocumentsResourceWithStreamingResponse """ return AsyncDocumentsResourceWithStreamingResponse(self) + async def create( + self, + *, + category: Literal["account_verification_letter"], + account_verification_letter: document_create_params.AccountVerificationLetter | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + idempotency_key: str | None = None, + ) -> Document: + """ + Create a Document + + Args: + category: The type of document to create. + + - `account_verification_letter` - An account verification letter. + + account_verification_letter: An account verification letter. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + return await self._post( + "/documents", + body=await async_maybe_transform( + { + "category": category, + "account_verification_letter": account_verification_letter, + }, + document_create_params.DocumentCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=Document, + ) + async def retrieve( self, document_id: str, @@ -264,6 +370,9 @@ class DocumentsResourceWithRawResponse: def __init__(self, documents: DocumentsResource) -> None: self._documents = documents + self.create = to_raw_response_wrapper( + documents.create, + ) self.retrieve = to_raw_response_wrapper( documents.retrieve, ) @@ -276,6 +385,9 @@ class AsyncDocumentsResourceWithRawResponse: def __init__(self, documents: AsyncDocumentsResource) -> None: self._documents = documents + self.create = async_to_raw_response_wrapper( + documents.create, + ) self.retrieve = async_to_raw_response_wrapper( documents.retrieve, ) @@ -288,6 +400,9 @@ class DocumentsResourceWithStreamingResponse: def __init__(self, documents: DocumentsResource) -> None: self._documents = documents + self.create = to_streamed_response_wrapper( + documents.create, + ) self.retrieve = to_streamed_response_wrapper( documents.retrieve, ) @@ -300,6 +415,9 @@ class AsyncDocumentsResourceWithStreamingResponse: def __init__(self, documents: AsyncDocumentsResource) -> None: self._documents = documents + self.create = async_to_streamed_response_wrapper( + documents.create, + ) self.retrieve = async_to_streamed_response_wrapper( documents.retrieve, ) diff --git a/src/increase/types/__init__.py b/src/increase/types/__init__.py index c6b3cb5d8..6b67834ca 100644 --- a/src/increase/types/__init__.py +++ b/src/increase/types/__init__.py @@ -68,6 +68,7 @@ from .physical_card_profile import PhysicalCardProfile as PhysicalCardProfile from .wire_drawdown_request import WireDrawdownRequest as WireDrawdownRequest from .account_balance_params import AccountBalanceParams as AccountBalanceParams +from .document_create_params import DocumentCreateParams as DocumentCreateParams from .file_link_create_params import FileLinkCreateParams as FileLinkCreateParams from .transaction_list_params import TransactionListParams as TransactionListParams from .ach_transfer_list_params import ACHTransferListParams as ACHTransferListParams diff --git a/src/increase/types/document.py b/src/increase/types/document.py index 8f9d6d8cc..941ee35dc 100644 --- a/src/increase/types/document.py +++ b/src/increase/types/document.py @@ -6,13 +6,21 @@ from .._models import BaseModel -__all__ = ["Document"] +__all__ = ["Document", "AccountVerificationLetter"] + + +class AccountVerificationLetter(BaseModel): + account_number_id: str + """The identifier of the Account Number the document was generated for.""" class Document(BaseModel): id: str """The Document identifier.""" + account_verification_letter: Optional[AccountVerificationLetter] = None + """Properties of an account verification letter document.""" + category: Literal[ "form_1099_int", "form_1099_misc", diff --git a/src/increase/types/document_create_params.py b/src/increase/types/document_create_params.py new file mode 100644 index 000000000..0470cb7fb --- /dev/null +++ b/src/increase/types/document_create_params.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Union +from datetime import date +from typing_extensions import Literal, Required, Annotated, TypedDict + +from .._utils import PropertyInfo + +__all__ = ["DocumentCreateParams", "AccountVerificationLetter"] + + +class DocumentCreateParams(TypedDict, total=False): + category: Required[Literal["account_verification_letter"]] + """The type of document to create. + + - `account_verification_letter` - An account verification letter. + """ + + account_verification_letter: AccountVerificationLetter + """An account verification letter.""" + + +class AccountVerificationLetter(TypedDict, total=False): + account_number_id: Required[str] + """The Account Number the bank letter should be generated for.""" + + balance_date: Annotated[Union[str, date], PropertyInfo(format="iso8601")] + """If provided, the letter will include the Account's balance as of the date.""" diff --git a/tests/api_resources/test_documents.py b/tests/api_resources/test_documents.py index 2133f0ac3..078706b41 100644 --- a/tests/api_resources/test_documents.py +++ b/tests/api_resources/test_documents.py @@ -10,7 +10,7 @@ from increase import Increase, AsyncIncrease from tests.utils import assert_matches_type from increase.types import Document -from increase._utils import parse_datetime +from increase._utils import parse_date, parse_datetime from increase.pagination import SyncPage, AsyncPage base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -19,6 +19,48 @@ class TestDocuments: parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) + @parametrize + def test_method_create(self, client: Increase) -> None: + document = client.documents.create( + category="account_verification_letter", + ) + assert_matches_type(Document, document, path=["response"]) + + @parametrize + def test_method_create_with_all_params(self, client: Increase) -> None: + document = client.documents.create( + category="account_verification_letter", + account_verification_letter={ + "account_number_id": "account_number_v18nkfqm6afpsrvy82b2", + "balance_date": parse_date("2024-12-31"), + }, + ) + assert_matches_type(Document, document, path=["response"]) + + @parametrize + def test_raw_response_create(self, client: Increase) -> None: + response = client.documents.with_raw_response.create( + category="account_verification_letter", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + document = response.parse() + assert_matches_type(Document, document, path=["response"]) + + @parametrize + def test_streaming_response_create(self, client: Increase) -> None: + with client.documents.with_streaming_response.create( + category="account_verification_letter", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + document = response.parse() + assert_matches_type(Document, document, path=["response"]) + + assert cast(Any, response.is_closed) is True + @parametrize def test_method_retrieve(self, client: Increase) -> None: document = client.documents.retrieve( @@ -103,6 +145,48 @@ def test_streaming_response_list(self, client: Increase) -> None: class TestAsyncDocuments: parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"]) + @parametrize + async def test_method_create(self, async_client: AsyncIncrease) -> None: + document = await async_client.documents.create( + category="account_verification_letter", + ) + assert_matches_type(Document, document, path=["response"]) + + @parametrize + async def test_method_create_with_all_params(self, async_client: AsyncIncrease) -> None: + document = await async_client.documents.create( + category="account_verification_letter", + account_verification_letter={ + "account_number_id": "account_number_v18nkfqm6afpsrvy82b2", + "balance_date": parse_date("2024-12-31"), + }, + ) + assert_matches_type(Document, document, path=["response"]) + + @parametrize + async def test_raw_response_create(self, async_client: AsyncIncrease) -> None: + response = await async_client.documents.with_raw_response.create( + category="account_verification_letter", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + document = await response.parse() + assert_matches_type(Document, document, path=["response"]) + + @parametrize + async def test_streaming_response_create(self, async_client: AsyncIncrease) -> None: + async with async_client.documents.with_streaming_response.create( + category="account_verification_letter", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + document = await response.parse() + assert_matches_type(Document, document, path=["response"]) + + assert cast(Any, response.is_closed) is True + @parametrize async def test_method_retrieve(self, async_client: AsyncIncrease) -> None: document = await async_client.documents.retrieve( From 12b4c34895e61a3bff66e6f5e17c128751118a61 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 20:06:19 +0000 Subject: [PATCH 2/4] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 43c250262..94d59c04b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 197 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-b9a610bb578b82c46d4222f4746d69c8e422f9cfad51a6d72d44c64f8746d709.yml -openapi_spec_hash: a63cc36300445b0201442108b6cc8530 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-644c7608acea9983d97a58a2b89d0f3f6d641c6dba30270e6ed03ea4f9942a90.yml +openapi_spec_hash: a024db2f41e8a801204741e95c4e57fd config_hash: 85850cd9055db4b9e43bcc4aa1a2dcea From cb4c03bee372c8d5584f1b151c4d1435763af20a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 20:20:43 +0000 Subject: [PATCH 3/4] feat(api): api update --- .stats.yml | 4 ++-- src/increase/types/external_account.py | 8 -------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.stats.yml b/.stats.yml index 94d59c04b..b6b5d3758 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 197 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-644c7608acea9983d97a58a2b89d0f3f6d641c6dba30270e6ed03ea4f9942a90.yml -openapi_spec_hash: a024db2f41e8a801204741e95c4e57fd +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-075bbbfbc34a6e34519bb157c21f280d0ba941ce2ddf834eafbbde3dbd3b52b9.yml +openapi_spec_hash: e0f7bef65d2cb1f3332b969254dee00a config_hash: 85850cd9055db4b9e43bcc4aa1a2dcea diff --git a/src/increase/types/external_account.py b/src/increase/types/external_account.py index d263f8e1c..1e59efa5b 100644 --- a/src/increase/types/external_account.py +++ b/src/increase/types/external_account.py @@ -65,11 +65,3 @@ class ExternalAccount(BaseModel): For this resource it will always be `external_account`. """ - - verification_status: Literal["unverified", "pending", "verified"] - """If you have verified ownership of the External Account. - - - `unverified` - The External Account has not been verified. - - `pending` - The External Account is in the process of being verified. - - `verified` - The External Account is verified. - """ From ba3c84936c85635508bf5b1f730ff58b556301fc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 20:21:04 +0000 Subject: [PATCH 4/4] release: 0.247.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 9 +++++++++ pyproject.toml | 2 +- src/increase/_version.py | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index be2cee26e..098de4c09 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.246.0" + ".": "0.247.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 10b58d6d1..3d1a270c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 0.247.0 (2025-06-03) + +Full Changelog: [v0.246.0...v0.247.0](https://github.com/Increase/increase-python/compare/v0.246.0...v0.247.0) + +### Features + +* **api:** api update ([cb4c03b](https://github.com/Increase/increase-python/commit/cb4c03bee372c8d5584f1b151c4d1435763af20a)) +* **api:** api update ([2c988fd](https://github.com/Increase/increase-python/commit/2c988fdb653a808d93c27b06a2897f49fd97c8cc)) + ## 0.246.0 (2025-06-02) Full Changelog: [v0.245.0...v0.246.0](https://github.com/Increase/increase-python/compare/v0.245.0...v0.246.0) diff --git a/pyproject.toml b/pyproject.toml index a449abb2c..2840a695e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "increase" -version = "0.246.0" +version = "0.247.0" description = "The official Python library for the increase API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/increase/_version.py b/src/increase/_version.py index b4725c512..88b5f51c8 100644 --- a/src/increase/_version.py +++ b/src/increase/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "increase" -__version__ = "0.246.0" # x-release-please-version +__version__ = "0.247.0" # x-release-please-version