From 67daeab6f4cca4c7c95fee247ca5125f73a66a8a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:49:27 -0700 Subject: [PATCH] release: 0.1.0-beta.1 (#76) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Automated Release PR --- ## 0.1.0-beta.1 (2024-08-23) Full Changelog: [v0.1.0-beta.0...v0.1.0-beta.1](https://github.com/Metronome-Industries/metronome-python/compare/v0.1.0-beta.0...v0.1.0-beta.1) ### Features * **api:** OpenAPI spec update via Stainless API ([#75](https://github.com/Metronome-Industries/metronome-python/issues/75)) ([4e3437e](https://github.com/Metronome-Industries/metronome-python/commit/4e3437e6bedcf2996594507ec4f7352e49a1e392)) --- This pull request is managed by Stainless's [GitHub App](https://github.com/apps/stainless-app). The [semver version number](https://semver.org/#semantic-versioning-specification-semver) is based on included [commit messages](https://www.conventionalcommits.org/en/v1.0.0/). Alternatively, you can manually set the version number in the title of this pull request. For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request. 🔗 Stainless [website](https://www.stainlessapi.com) 📚 Read the [docs](https://app.stainlessapi.com/docs) 🙋 [Reach out](mailto:support@stainlessapi.com) for help or questions --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- .stats.yml | 2 +- CHANGELOG.md | 8 ++ api.md | 3 +- pyproject.toml | 2 +- src/metronome/_version.py | 2 +- src/metronome/resources/invoices.py | 83 +++++++++++++++++++- src/metronome/types/__init__.py | 2 + src/metronome/types/invoice_void_params.py | 12 +++ src/metronome/types/invoice_void_response.py | 15 ++++ tests/api_resources/test_invoices.py | 67 +++++++++++++++- 11 files changed, 191 insertions(+), 7 deletions(-) create mode 100755 src/metronome/types/invoice_void_params.py create mode 100755 src/metronome/types/invoice_void_response.py diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 28e93c39..e613b816 100755 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0-beta.0" + ".": "0.1.0-beta.1" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 2dfbdb2b..95c6e357 100755 --- a/.stats.yml +++ b/.stats.yml @@ -1,2 +1,2 @@ -configured_endpoints: 87 +configured_endpoints: 88 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/metronome%2Fmetronome-085bb8699d222fd7950750078c4ea00fb8728477809a8ebc74521a7ad5f32038.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 21d306b4..5a606b25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.1.0-beta.1 (2024-08-23) + +Full Changelog: [v0.1.0-beta.0...v0.1.0-beta.1](https://github.com/Metronome-Industries/metronome-python/compare/v0.1.0-beta.0...v0.1.0-beta.1) + +### Features + +* **api:** OpenAPI spec update via Stainless API ([#75](https://github.com/Metronome-Industries/metronome-python/issues/75)) ([4e3437e](https://github.com/Metronome-Industries/metronome-python/commit/4e3437e6bedcf2996594507ec4f7352e49a1e392)) + ## 0.1.0-beta.0 (2024-08-22) Full Changelog: [v0.1.0-alpha.4...v0.1.0-beta.0](https://github.com/Metronome-Industries/metronome-python/compare/v0.1.0-alpha.4...v0.1.0-beta.0) diff --git a/api.md b/api.md index 0a6e56a3..ec850a30 100755 --- a/api.md +++ b/api.md @@ -313,12 +313,13 @@ Methods: Types: ```python -from metronome.types import InvoiceRegenerateResponse +from metronome.types import InvoiceRegenerateResponse, InvoiceVoidResponse ``` Methods: - client.invoices.regenerate(\*\*params) -> InvoiceRegenerateResponse +- client.invoices.void(\*\*params) -> InvoiceVoidResponse # Contracts diff --git a/pyproject.toml b/pyproject.toml index b385e466..780d14a4 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "metronome-sdk" -version = "0.1.0-beta.0" +version = "0.1.0-beta.1" description = "The official Python library for the metronome API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/metronome/_version.py b/src/metronome/_version.py index b0bbce19..36017794 100755 --- a/src/metronome/_version.py +++ b/src/metronome/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "metronome" -__version__ = "0.1.0-beta.0" # x-release-please-version +__version__ = "0.1.0-beta.1" # x-release-please-version diff --git a/src/metronome/resources/invoices.py b/src/metronome/resources/invoices.py index 4cb55d15..697c284e 100755 --- a/src/metronome/resources/invoices.py +++ b/src/metronome/resources/invoices.py @@ -4,7 +4,7 @@ import httpx -from ..types import invoice_regenerate_params +from ..types import invoice_void_params, invoice_regenerate_params from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven from .._utils import ( maybe_transform, @@ -19,6 +19,7 @@ async_to_streamed_response_wrapper, ) from .._base_client import make_request_options +from ..types.invoice_void_response import InvoiceVoidResponse from ..types.invoice_regenerate_response import InvoiceRegenerateResponse __all__ = ["InvoicesResource", "AsyncInvoicesResource"] @@ -67,6 +68,40 @@ def regenerate( cast_to=InvoiceRegenerateResponse, ) + def void( + self, + *, + id: str, + # 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, + ) -> InvoiceVoidResponse: + """ + Void an invoice + + Args: + id: The invoice id to void + + 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 + """ + return self._post( + "/invoices/void", + body=maybe_transform({"id": id}, invoice_void_params.InvoiceVoidParams), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=InvoiceVoidResponse, + ) + class AsyncInvoicesResource(AsyncAPIResource): @cached_property @@ -111,6 +146,40 @@ async def regenerate( cast_to=InvoiceRegenerateResponse, ) + async def void( + self, + *, + id: str, + # 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, + ) -> InvoiceVoidResponse: + """ + Void an invoice + + Args: + id: The invoice id to void + + 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 + """ + return await self._post( + "/invoices/void", + body=await async_maybe_transform({"id": id}, invoice_void_params.InvoiceVoidParams), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=InvoiceVoidResponse, + ) + class InvoicesResourceWithRawResponse: def __init__(self, invoices: InvoicesResource) -> None: @@ -119,6 +188,9 @@ def __init__(self, invoices: InvoicesResource) -> None: self.regenerate = to_raw_response_wrapper( invoices.regenerate, ) + self.void = to_raw_response_wrapper( + invoices.void, + ) class AsyncInvoicesResourceWithRawResponse: @@ -128,6 +200,9 @@ def __init__(self, invoices: AsyncInvoicesResource) -> None: self.regenerate = async_to_raw_response_wrapper( invoices.regenerate, ) + self.void = async_to_raw_response_wrapper( + invoices.void, + ) class InvoicesResourceWithStreamingResponse: @@ -137,6 +212,9 @@ def __init__(self, invoices: InvoicesResource) -> None: self.regenerate = to_streamed_response_wrapper( invoices.regenerate, ) + self.void = to_streamed_response_wrapper( + invoices.void, + ) class AsyncInvoicesResourceWithStreamingResponse: @@ -146,3 +224,6 @@ def __init__(self, invoices: AsyncInvoicesResource) -> None: self.regenerate = async_to_streamed_response_wrapper( invoices.regenerate, ) + self.void = async_to_streamed_response_wrapper( + invoices.void, + ) diff --git a/src/metronome/types/__init__.py b/src/metronome/types/__init__.py index d3858377..c116ab58 100755 --- a/src/metronome/types/__init__.py +++ b/src/metronome/types/__init__.py @@ -28,6 +28,7 @@ from .plan_list_response import PlanListResponse as PlanListResponse from .alert_create_params import AlertCreateParams as AlertCreateParams from .credit_ledger_entry import CreditLedgerEntry as CreditLedgerEntry +from .invoice_void_params import InvoiceVoidParams as InvoiceVoidParams from .usage_ingest_params import UsageIngestParams as UsageIngestParams from .usage_list_response import UsageListResponse as UsageListResponse from .alert_archive_params import AlertArchiveParams as AlertArchiveParams @@ -36,6 +37,7 @@ from .alert_create_response import AlertCreateResponse as AlertCreateResponse from .audit_log_list_params import AuditLogListParams as AuditLogListParams from .contract_amend_params import ContractAmendParams as ContractAmendParams +from .invoice_void_response import InvoiceVoidResponse as InvoiceVoidResponse from .service_list_response import ServiceListResponse as ServiceListResponse from .alert_archive_response import AlertArchiveResponse as AlertArchiveResponse from .contract_create_params import ContractCreateParams as ContractCreateParams diff --git a/src/metronome/types/invoice_void_params.py b/src/metronome/types/invoice_void_params.py new file mode 100755 index 00000000..8a876c8c --- /dev/null +++ b/src/metronome/types/invoice_void_params.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["InvoiceVoidParams"] + + +class InvoiceVoidParams(TypedDict, total=False): + id: Required[str] + """The invoice id to void""" diff --git a/src/metronome/types/invoice_void_response.py b/src/metronome/types/invoice_void_response.py new file mode 100755 index 00000000..fa3649db --- /dev/null +++ b/src/metronome/types/invoice_void_response.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional + +from .._models import BaseModel + +__all__ = ["InvoiceVoidResponse", "Data"] + + +class Data(BaseModel): + id: str + + +class InvoiceVoidResponse(BaseModel): + data: Optional[Data] = None diff --git a/tests/api_resources/test_invoices.py b/tests/api_resources/test_invoices.py index 672780d4..6a99da7f 100755 --- a/tests/api_resources/test_invoices.py +++ b/tests/api_resources/test_invoices.py @@ -9,7 +9,10 @@ from metronome import Metronome, AsyncMetronome from tests.utils import assert_matches_type -from metronome.types import InvoiceRegenerateResponse +from metronome.types import ( + InvoiceVoidResponse, + InvoiceRegenerateResponse, +) base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -48,6 +51,37 @@ def test_streaming_response_regenerate(self, client: Metronome) -> None: assert cast(Any, response.is_closed) is True + @parametrize + def test_method_void(self, client: Metronome) -> None: + invoice = client.invoices.void( + id="6a37bb88-8538-48c5-b37b-a41c836328bd", + ) + assert_matches_type(InvoiceVoidResponse, invoice, path=["response"]) + + @parametrize + def test_raw_response_void(self, client: Metronome) -> None: + response = client.invoices.with_raw_response.void( + id="6a37bb88-8538-48c5-b37b-a41c836328bd", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + invoice = response.parse() + assert_matches_type(InvoiceVoidResponse, invoice, path=["response"]) + + @parametrize + def test_streaming_response_void(self, client: Metronome) -> None: + with client.invoices.with_streaming_response.void( + id="6a37bb88-8538-48c5-b37b-a41c836328bd", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + invoice = response.parse() + assert_matches_type(InvoiceVoidResponse, invoice, path=["response"]) + + assert cast(Any, response.is_closed) is True + class TestAsyncInvoices: parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"]) @@ -82,3 +116,34 @@ async def test_streaming_response_regenerate(self, async_client: AsyncMetronome) assert_matches_type(InvoiceRegenerateResponse, invoice, path=["response"]) assert cast(Any, response.is_closed) is True + + @parametrize + async def test_method_void(self, async_client: AsyncMetronome) -> None: + invoice = await async_client.invoices.void( + id="6a37bb88-8538-48c5-b37b-a41c836328bd", + ) + assert_matches_type(InvoiceVoidResponse, invoice, path=["response"]) + + @parametrize + async def test_raw_response_void(self, async_client: AsyncMetronome) -> None: + response = await async_client.invoices.with_raw_response.void( + id="6a37bb88-8538-48c5-b37b-a41c836328bd", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + invoice = await response.parse() + assert_matches_type(InvoiceVoidResponse, invoice, path=["response"]) + + @parametrize + async def test_streaming_response_void(self, async_client: AsyncMetronome) -> None: + async with async_client.invoices.with_streaming_response.void( + id="6a37bb88-8538-48c5-b37b-a41c836328bd", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + invoice = await response.parse() + assert_matches_type(InvoiceVoidResponse, invoice, path=["response"]) + + assert cast(Any, response.is_closed) is True