From d91b3197935d903bfe83a824d4738a942cb842a2 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 17:11:47 +0000 Subject: [PATCH] SDK regeneration --- poetry.lock | 14 +- pyproject.toml | 2 +- reference.md | 220 ++++++++-- src/schematic/__init__.py | 22 + src/schematic/accesstokens/client.py | 4 +- .../issue_temporary_access_token_response.py | 4 +- src/schematic/accounts/client.py | 58 ++- src/schematic/base_client.py | 8 +- src/schematic/billing/__init__.py | 10 + src/schematic/billing/client.py | 379 ++++++++++++++++-- src/schematic/billing/types/__init__.py | 12 + .../types/count_billing_products_params.py | 4 +- ...te_billing_price_request_body_tier_mode.py | 5 + ...riptions_request_body_trial_end_setting.py | 5 + .../types/delete_billing_product_response.py | 24 ++ .../types/list_billing_products_params.py | 4 +- .../types/list_billing_products_response.py | 4 +- .../billing/types/list_customers_response.py | 4 +- .../types/list_payment_methods_params.py | 2 - .../types/list_product_prices_params.py | 4 +- .../types/search_billing_prices_params.py | 5 +- ...earch_billing_prices_request_usage_type.py | 5 + ...lling_prices_response_params_usage_type.py | 5 + src/schematic/checkout/client.py | 36 +- .../preview_checkout_internal_response.py | 4 +- src/schematic/companies/client.py | 124 ++++-- .../count_entity_key_definitions_params.py | 4 +- .../get_entity_trait_definition_response.py | 4 +- ...t_or_create_company_membership_response.py | 4 +- ...create_entity_trait_definition_response.py | 4 +- .../list_company_memberships_response.py | 4 +- .../list_entity_key_definitions_params.py | 4 +- .../list_entity_trait_definitions_params.py | 4 +- .../list_entity_trait_definitions_response.py | 4 +- ...update_entity_trait_definition_response.py | 4 +- src/schematic/components/client.py | 28 +- src/schematic/core/client_wrapper.py | 16 +- src/schematic/core/file.py | 3 +- src/schematic/core/pydantic_utilities.py | 8 +- src/schematic/crm/client.py | 4 +- src/schematic/entitlements/client.py | 92 ++++- ...any_override_request_body_metric_period.py | 3 +- ..._entitlement_request_body_metric_period.py | 3 +- ...any_override_request_body_metric_period.py | 3 +- ..._entitlement_request_body_metric_period.py | 3 +- src/schematic/events/client.py | 12 +- src/schematic/features/client.py | 92 ++++- src/schematic/plangroups/client.py | 89 ++-- src/schematic/plans/client.py | 28 +- src/schematic/types/__init__.py | 12 + src/schematic/types/audience_request_body.py | 4 +- .../billing_product_detail_response_data.py | 1 + .../types/billing_product_pricing.py | 3 +- .../billing_product_pricing_usage_type.py | 5 + .../billing_subscription_response_data.py | 3 + .../types/billing_subscription_view.py | 7 +- .../types/company_detail_response_data.py | 6 +- .../company_subscription_response_data.py | 8 +- src/schematic/types/component_capabilities.py | 1 + .../create_billing_price_tier_request_body.py | 22 + .../types/create_entitlement_req_common.py | 12 +- ...te_entitlement_req_common_metric_period.py | 3 +- ...create_or_update_condition_request_body.py | 12 +- ...e_condition_request_body_condition_type.py | 11 +- ...te_condition_request_body_metric_period.py | 3 +- ..._update_condition_request_body_operator.py | 3 +- .../create_or_update_rule_request_body.py | 8 +- ...e_or_update_rule_request_body_rule_type.py | 9 +- src/schematic/types/entitlements_in_plan.py | 20 + .../types/feature_company_response_data.py | 4 +- .../feature_company_user_response_data.py | 4 +- .../types/feature_detail_response_data.py | 2 + src/schematic/types/feature_response_data.py | 2 + .../types/feature_usage_response_data.py | 9 +- src/schematic/types/ordered_plans_in_group.py | 21 + .../types/payment_method_request_body.py | 1 - .../types/payment_method_response_data.py | 1 - .../plan_audience_detail_response_data.py | 4 +- .../types/plan_entitlement_response_data.py | 1 + .../types/plan_entitlements_order.py | 20 + .../types/plan_group_detail_response_data.py | 2 + .../plan_group_plan_entitlements_order.py | 21 + .../types/plan_group_response_data.py | 3 +- .../types/rule_detail_response_data.py | 4 +- .../types/update_entitlement_req_common.py | 12 +- ...te_entitlement_req_common_metric_period.py | 3 +- .../types/update_rule_request_body.py | 4 +- .../usage_based_entitlement_request_body.py | 1 + src/schematic/types/webhook_response_data.py | 1 + src/schematic/webhooks/client.py | 38 +- tests/utils/test_http_client.py | 10 +- tests/utils/test_query_encoding.py | 16 +- tests/utils/test_serialization.py | 40 +- 93 files changed, 1490 insertions(+), 275 deletions(-) create mode 100644 src/schematic/billing/types/create_billing_price_request_body_tier_mode.py create mode 100644 src/schematic/billing/types/create_billing_subscriptions_request_body_trial_end_setting.py create mode 100644 src/schematic/billing/types/delete_billing_product_response.py create mode 100644 src/schematic/billing/types/search_billing_prices_request_usage_type.py create mode 100644 src/schematic/billing/types/search_billing_prices_response_params_usage_type.py create mode 100644 src/schematic/types/billing_product_pricing_usage_type.py create mode 100644 src/schematic/types/create_billing_price_tier_request_body.py create mode 100644 src/schematic/types/entitlements_in_plan.py create mode 100644 src/schematic/types/ordered_plans_in_group.py create mode 100644 src/schematic/types/plan_entitlements_order.py create mode 100644 src/schematic/types/plan_group_plan_entitlements_order.py diff --git a/poetry.lock b/poetry.lock index 12b0f2c..b603c94 100644 --- a/poetry.lock +++ b/poetry.lock @@ -144,13 +144,13 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "iniconfig" -version = "2.0.0" +version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, ] [[package]] @@ -525,13 +525,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.13.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, + {file = "typing_extensions-4.13.0-py3-none-any.whl", hash = "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5"}, + {file = "typing_extensions-4.13.0.tar.gz", hash = "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b"}, ] [metadata] diff --git a/pyproject.toml b/pyproject.toml index bc46ea3..60b2c6a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "schematichq" [tool.poetry] name = "schematichq" -version = "1.0.6" +version = "1.0.7" description = "" readme = "README.md" authors = [] diff --git a/reference.md b/reference.md index bd3e433..ef487bd 100644 --- a/reference.md +++ b/reference.md @@ -1596,6 +1596,22 @@ client.features.create_feature(
+**plural_name:** `typing.Optional[str]` + +
+
+ +
+
+ +**singular_name:** `typing.Optional[str]` + +
+
+ +
+
+ **trait_id:** `typing.Optional[str]`
@@ -1780,6 +1796,22 @@ client.features.update_feature(
+**plural_name:** `typing.Optional[str]` + +
+
+ +
+
+ +**singular_name:** `typing.Optional[str]` + +
+
+ +
+
+ **trait_id:** `typing.Optional[str]`
@@ -2981,6 +3013,14 @@ client.billing.upsert_billing_customer(
+**default_payment_method_id:** `typing.Optional[str]` + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -3608,14 +3648,6 @@ client.billing.list_payment_methods(
-**subscription_external_id:** `typing.Optional[str]` - -
-
- -
-
- **limit:** `typing.Optional[int]` — Page limit (default 100)
@@ -3778,14 +3810,6 @@ client.billing.upsert_payment_method(
-**subscription_external_id:** `typing.Optional[str]` - -
-
- -
-
- **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -3856,7 +3880,7 @@ client.billing.search_billing_prices()
-**usage_type:** `typing.Optional[str]` +**usage_type:** `typing.Optional[SearchBillingPricesRequestUsageType]`
@@ -3913,17 +3937,23 @@ client.billing.search_billing_prices()
```python -from schematic import Schematic +from schematic import CreateBillingPriceTierRequestBody, Schematic client = Schematic( api_key="YOUR_API_KEY", ) client.billing.upsert_billing_price( currency="currency", + external_account_id="external_account_id", interval="interval", is_active=True, price=1, price_external_id="price_external_id", + price_tiers=[ + CreateBillingPriceTierRequestBody( + price_external_id="price_external_id", + ) + ], product_external_id="product_external_id", usage_type="licensed", ) @@ -3950,6 +3980,14 @@ client.billing.upsert_billing_price(
+**external_account_id:** `str` + +
+
+ +
+
+ **interval:** `str`
@@ -3982,6 +4020,14 @@ client.billing.upsert_billing_price(
+**price_tiers:** `typing.Sequence[CreateBillingPriceTierRequestBody]` + +
+
+ +
+
+ **product_external_id:** `str`
@@ -4006,6 +4052,70 @@ client.billing.upsert_billing_price(
+**tier_mode:** `typing.Optional[CreateBillingPriceRequestBodyTierMode]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + + +
+ + +
client.billing.delete_billing_product(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic + +client = Schematic( + api_key="YOUR_API_KEY", +) +client.billing.delete_billing_product( + billing_id="billing_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**billing_id:** `str` — billing_id + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -4211,6 +4321,7 @@ client = Schematic( api_key="YOUR_API_KEY", ) client.billing.upsert_billing_product( + active=True, currency="currency", external_id="external_id", name="name", @@ -4232,6 +4343,14 @@ client.billing.upsert_billing_product(
+**active:** `bool` + +
+
+ +
+
+ **currency:** `str`
@@ -4545,6 +4664,7 @@ client = Schematic( api_key="YOUR_API_KEY", ) client.billing.upsert_billing_subscription( + cancel_at_period_end=True, currency="currency", customer_external_id="customer_external_id", discounts=[ @@ -4568,7 +4688,7 @@ client.billing.upsert_billing_subscription( price_external_id="price_external_id", product_external_id="product_external_id", quantity=1, - usage_type="usage_type", + usage_type="licensed", ) ], subscription_external_id="subscription_external_id", @@ -4589,6 +4709,14 @@ client.billing.upsert_billing_subscription(
+**cancel_at_period_end:** `bool` + +
+
+ +
+
+ **currency:** `str`
@@ -4645,6 +4773,22 @@ client.billing.upsert_billing_subscription(
+**cancel_at:** `typing.Optional[int]` + +
+
+ +
+
+ +**default_payment_method_id:** `typing.Optional[str]` + +
+
+ +
+
+ **interval:** `typing.Optional[str]`
@@ -4693,7 +4837,7 @@ client.billing.upsert_billing_subscription(
-**trial_end_setting:** `typing.Optional[str]` +**trial_end_setting:** `typing.Optional[CreateBillingSubscriptionsRequestBodyTrialEndSetting]`
@@ -8868,6 +9012,14 @@ client.entitlements.create_plan_entitlement(
+**soft_limit:** `typing.Optional[int]` + +
+
+ +
+
+ **value_bool:** `typing.Optional[bool]`
@@ -9053,6 +9205,14 @@ client.entitlements.update_plan_entitlement(
+**soft_limit:** `typing.Optional[int]` + +
+
+ +
+
+ **value_bool:** `typing.Optional[bool]`
@@ -11692,14 +11852,18 @@ client.plangroups.get_plan_group()
```python -from schematic import Schematic +from schematic import OrderedPlansInGroup, Schematic client = Schematic( api_key="YOUR_API_KEY", ) client.plangroups.create_plan_group( add_on_ids=["add_on_ids"], - plan_ids=["plan_ids"], + ordered_plans=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], ) ``` @@ -11724,7 +11888,7 @@ client.plangroups.create_plan_group(
-**plan_ids:** `typing.Sequence[str]` +**ordered_plans:** `typing.Sequence[OrderedPlansInGroup]`
@@ -11797,7 +11961,7 @@ client.plangroups.create_plan_group(
```python -from schematic import Schematic +from schematic import OrderedPlansInGroup, Schematic client = Schematic( api_key="YOUR_API_KEY", @@ -11805,7 +11969,11 @@ client = Schematic( client.plangroups.update_plan_group( plan_group_id="plan_group_id", add_on_ids=["add_on_ids"], - plan_ids=["plan_ids"], + ordered_plans=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], ) ``` @@ -11838,7 +12006,7 @@ client.plangroups.update_plan_group(
-**plan_ids:** `typing.Sequence[str]` +**ordered_plans:** `typing.Sequence[OrderedPlansInGroup]`
diff --git a/src/schematic/__init__.py b/src/schematic/__init__.py index e78ede2..290630b 100644 --- a/src/schematic/__init__.py +++ b/src/schematic/__init__.py @@ -19,6 +19,7 @@ BillingProductPlanResponseData, BillingProductPriceResponseData, BillingProductPricing, + BillingProductPricingUsageType, BillingProductResponseData, BillingSubscriptionDiscount, BillingSubscriptionDiscountView, @@ -46,6 +47,7 @@ ComponentResponseData, CountResponse, CouponRequestBody, + CreateBillingPriceTierRequestBody, CreateEntitlementReqCommon, CreateEntitlementReqCommonMetricPeriod, CreateEntitlementReqCommonMetricPeriodMonthReset, @@ -70,6 +72,7 @@ CustomPlanViewConfigResponseData, Decimal, DeleteResponse, + EntitlementsInPlan, EntityKeyDefinitionResponseData, EntityKeyDetailResponseData, EntityKeyResponseData, @@ -104,6 +107,7 @@ IssueTemporaryAccessTokenResponseData, KeysRequestBody, MeterRequestBody, + OrderedPlansInGroup, PaginationFilter, PaymentMethodRequestBody, PaymentMethodResponseData, @@ -111,8 +115,10 @@ PlanAudienceResponseData, PlanDetailResponseData, PlanEntitlementResponseData, + PlanEntitlementsOrder, PlanGroupDetailResponseData, PlanGroupPlanDetailResponseData, + PlanGroupPlanEntitlementsOrder, PlanGroupResponseData, PlanResponseData, PreviewObject, @@ -196,7 +202,10 @@ CountBillingProductsResponseParamsPriceUsageType, CountCustomersParams, CountCustomersResponse, + CreateBillingPriceRequestBodyTierMode, CreateBillingPriceRequestBodyUsageType, + CreateBillingSubscriptionsRequestBodyTrialEndSetting, + DeleteBillingProductResponse, DeleteProductPriceResponse, ListBillingProductsParams, ListBillingProductsRequestPriceUsageType, @@ -217,7 +226,9 @@ ListProductPricesResponse, ListProductPricesResponseParamsPriceUsageType, SearchBillingPricesParams, + SearchBillingPricesRequestUsageType, SearchBillingPricesResponse, + SearchBillingPricesResponseParamsUsageType, UpsertBillingCouponResponse, UpsertBillingCustomerResponse, UpsertBillingMeterResponse, @@ -464,6 +475,7 @@ "BillingProductPlanResponseData", "BillingProductPriceResponseData", "BillingProductPricing", + "BillingProductPricingUsageType", "BillingProductResponseData", "BillingSubscriptionDiscount", "BillingSubscriptionDiscountView", @@ -545,7 +557,10 @@ "CountWebhooksResponse", "CouponRequestBody", "CreateApiKeyResponse", + "CreateBillingPriceRequestBodyTierMode", "CreateBillingPriceRequestBodyUsageType", + "CreateBillingPriceTierRequestBody", + "CreateBillingSubscriptionsRequestBodyTrialEndSetting", "CreateCompanyOverrideRequestBodyMetricPeriod", "CreateCompanyOverrideRequestBodyMetricPeriodMonthReset", "CreateCompanyOverrideRequestBodyValueType", @@ -597,6 +612,7 @@ "Decimal", "DeleteApiKeyResponse", "DeleteAudienceResponse", + "DeleteBillingProductResponse", "DeleteCompanyByKeysResponse", "DeleteCompanyMembershipResponse", "DeleteCompanyOverrideResponse", @@ -612,6 +628,7 @@ "DeleteUserByKeysResponse", "DeleteUserResponse", "DeleteWebhookResponse", + "EntitlementsInPlan", "EntityKeyDefinitionResponseData", "EntityKeyDetailResponseData", "EntityKeyResponseData", @@ -756,6 +773,7 @@ "LookupUserResponse", "MeterRequestBody", "NotFoundError", + "OrderedPlansInGroup", "PaginationFilter", "PaymentMethodRequestBody", "PaymentMethodResponseData", @@ -763,8 +781,10 @@ "PlanAudienceResponseData", "PlanDetailResponseData", "PlanEntitlementResponseData", + "PlanEntitlementsOrder", "PlanGroupDetailResponseData", "PlanGroupPlanDetailResponseData", + "PlanGroupPlanEntitlementsOrder", "PlanGroupResponseData", "PlanResponseData", "PreviewCheckoutInternalResponse", @@ -786,7 +806,9 @@ "SchematicConfig", "SchematicEnvironment", "SearchBillingPricesParams", + "SearchBillingPricesRequestUsageType", "SearchBillingPricesResponse", + "SearchBillingPricesResponseParamsUsageType", "SegmentStatusResp", "StripeEmbedInfo", "TemporaryAccessTokenResponseData", diff --git a/src/schematic/accesstokens/client.py b/src/schematic/accesstokens/client.py index add07bf..c048a90 100644 --- a/src/schematic/accesstokens/client.py +++ b/src/schematic/accesstokens/client.py @@ -3,7 +3,9 @@ import typing from ..core.client_wrapper import SyncClientWrapper from ..core.request_options import RequestOptions -from .types.issue_temporary_access_token_response import IssueTemporaryAccessTokenResponse +from .types.issue_temporary_access_token_response import ( + IssueTemporaryAccessTokenResponse, +) from ..core.pydantic_utilities import parse_obj_as from ..errors.bad_request_error import BadRequestError from ..types.api_error import ApiError as types_api_error_ApiError diff --git a/src/schematic/accesstokens/types/issue_temporary_access_token_response.py b/src/schematic/accesstokens/types/issue_temporary_access_token_response.py index 0b99b85..a1e5de9 100644 --- a/src/schematic/accesstokens/types/issue_temporary_access_token_response.py +++ b/src/schematic/accesstokens/types/issue_temporary_access_token_response.py @@ -1,7 +1,9 @@ # This file was auto-generated by Fern from our API Definition. from ...core.pydantic_utilities import UniversalBaseModel -from ...types.issue_temporary_access_token_response_data import IssueTemporaryAccessTokenResponseData +from ...types.issue_temporary_access_token_response_data import ( + IssueTemporaryAccessTokenResponseData, +) import typing import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/accounts/client.py b/src/schematic/accounts/client.py index 742f105..6d1b3ee 100644 --- a/src/schematic/accounts/client.py +++ b/src/schematic/accounts/client.py @@ -23,10 +23,14 @@ from .types.get_api_request_response import GetApiRequestResponse from .types.count_api_requests_response import CountApiRequestsResponse from .types.list_environments_response import ListEnvironmentsResponse -from .types.create_environment_request_body_environment_type import CreateEnvironmentRequestBodyEnvironmentType +from .types.create_environment_request_body_environment_type import ( + CreateEnvironmentRequestBodyEnvironmentType, +) from .types.create_environment_response import CreateEnvironmentResponse from .types.get_environment_response import GetEnvironmentResponse -from .types.update_environment_request_body_environment_type import UpdateEnvironmentRequestBodyEnvironmentType +from .types.update_environment_request_body_environment_type import ( + UpdateEnvironmentRequestBodyEnvironmentType, +) from .types.update_environment_response import UpdateEnvironmentResponse from .types.delete_environment_response import DeleteEnvironmentResponse from ..core.client_wrapper import AsyncClientWrapper @@ -250,7 +254,10 @@ def create_api_key( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_api_key( - self, api_key_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + api_key_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetApiKeyResponse: """ Parameters @@ -451,7 +458,10 @@ def update_api_key( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_api_key( - self, api_key_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + api_key_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteApiKeyResponse: """ Parameters @@ -752,7 +762,10 @@ def list_api_requests( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_api_request( - self, api_request_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + api_request_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetApiRequestResponse: """ Parameters @@ -1148,7 +1161,10 @@ def create_environment( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_environment( - self, environment_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + environment_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetEnvironmentResponse: """ Parameters @@ -1349,7 +1365,10 @@ def update_environment( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_environment( - self, environment_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + environment_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteEnvironmentResponse: """ Parameters @@ -1667,7 +1686,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_api_key( - self, api_key_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + api_key_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetApiKeyResponse: """ Parameters @@ -1884,7 +1906,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_api_key( - self, api_key_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + api_key_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteApiKeyResponse: """ Parameters @@ -2209,7 +2234,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_api_request( - self, api_request_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + api_request_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetApiRequestResponse: """ Parameters @@ -2637,7 +2665,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_environment( - self, environment_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + environment_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetEnvironmentResponse: """ Parameters @@ -2854,7 +2885,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_environment( - self, environment_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + environment_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteEnvironmentResponse: """ Parameters diff --git a/src/schematic/base_client.py b/src/schematic/base_client.py index adeedb5..495421d 100644 --- a/src/schematic/base_client.py +++ b/src/schematic/base_client.py @@ -80,7 +80,9 @@ def __init__( follow_redirects: typing.Optional[bool] = True, httpx_client: typing.Optional[httpx.Client] = None, ): - _defaulted_timeout = timeout if timeout is not None else 60 if httpx_client is None else None + _defaulted_timeout = ( + timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read + ) self._client_wrapper = SyncClientWrapper( base_url=_get_base_url(base_url=base_url, environment=environment), api_key=api_key, @@ -153,7 +155,9 @@ def __init__( follow_redirects: typing.Optional[bool] = True, httpx_client: typing.Optional[httpx.AsyncClient] = None, ): - _defaulted_timeout = timeout if timeout is not None else 60 if httpx_client is None else None + _defaulted_timeout = ( + timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read + ) self._client_wrapper = AsyncClientWrapper( base_url=_get_base_url(base_url=base_url, environment=environment), api_key=api_key, diff --git a/src/schematic/billing/__init__.py b/src/schematic/billing/__init__.py index fba40e7..aebad97 100644 --- a/src/schematic/billing/__init__.py +++ b/src/schematic/billing/__init__.py @@ -7,7 +7,10 @@ CountBillingProductsResponseParamsPriceUsageType, CountCustomersParams, CountCustomersResponse, + CreateBillingPriceRequestBodyTierMode, CreateBillingPriceRequestBodyUsageType, + CreateBillingSubscriptionsRequestBodyTrialEndSetting, + DeleteBillingProductResponse, DeleteProductPriceResponse, ListBillingProductsParams, ListBillingProductsRequestPriceUsageType, @@ -28,7 +31,9 @@ ListProductPricesResponse, ListProductPricesResponseParamsPriceUsageType, SearchBillingPricesParams, + SearchBillingPricesRequestUsageType, SearchBillingPricesResponse, + SearchBillingPricesResponseParamsUsageType, UpsertBillingCouponResponse, UpsertBillingCustomerResponse, UpsertBillingMeterResponse, @@ -46,7 +51,10 @@ "CountBillingProductsResponseParamsPriceUsageType", "CountCustomersParams", "CountCustomersResponse", + "CreateBillingPriceRequestBodyTierMode", "CreateBillingPriceRequestBodyUsageType", + "CreateBillingSubscriptionsRequestBodyTrialEndSetting", + "DeleteBillingProductResponse", "DeleteProductPriceResponse", "ListBillingProductsParams", "ListBillingProductsRequestPriceUsageType", @@ -67,7 +75,9 @@ "ListProductPricesResponse", "ListProductPricesResponseParamsPriceUsageType", "SearchBillingPricesParams", + "SearchBillingPricesRequestUsageType", "SearchBillingPricesResponse", + "SearchBillingPricesResponseParamsUsageType", "UpsertBillingCouponResponse", "UpsertBillingCustomerResponse", "UpsertBillingMeterResponse", diff --git a/src/schematic/billing/client.py b/src/schematic/billing/client.py index 0f658e9..70e2e18 100644 --- a/src/schematic/billing/client.py +++ b/src/schematic/billing/client.py @@ -23,22 +23,45 @@ from .types.upsert_billing_meter_response import UpsertBillingMeterResponse from .types.list_payment_methods_response import ListPaymentMethodsResponse from .types.upsert_payment_method_response import UpsertPaymentMethodResponse +from .types.search_billing_prices_request_usage_type import ( + SearchBillingPricesRequestUsageType, +) from .types.search_billing_prices_response import SearchBillingPricesResponse -from .types.create_billing_price_request_body_usage_type import CreateBillingPriceRequestBodyUsageType +from ..types.create_billing_price_tier_request_body import ( + CreateBillingPriceTierRequestBody, +) +from .types.create_billing_price_request_body_usage_type import ( + CreateBillingPriceRequestBodyUsageType, +) +from .types.create_billing_price_request_body_tier_mode import ( + CreateBillingPriceRequestBodyTierMode, +) from .types.upsert_billing_price_response import UpsertBillingPriceResponse -from .types.list_product_prices_request_price_usage_type import ListProductPricesRequestPriceUsageType +from ..core.serialization import convert_and_respect_annotation_metadata +from .types.delete_billing_product_response import DeleteBillingProductResponse +from ..core.jsonable_encoder import jsonable_encoder +from .types.list_product_prices_request_price_usage_type import ( + ListProductPricesRequestPriceUsageType, +) from .types.list_product_prices_response import ListProductPricesResponse from .types.delete_product_price_response import DeleteProductPriceResponse -from ..core.jsonable_encoder import jsonable_encoder from .types.upsert_billing_product_response import UpsertBillingProductResponse -from .types.list_billing_products_request_price_usage_type import ListBillingProductsRequestPriceUsageType +from .types.list_billing_products_request_price_usage_type import ( + ListBillingProductsRequestPriceUsageType, +) from .types.list_billing_products_response import ListBillingProductsResponse -from .types.count_billing_products_request_price_usage_type import CountBillingProductsRequestPriceUsageType +from .types.count_billing_products_request_price_usage_type import ( + CountBillingProductsRequestPriceUsageType, +) from .types.count_billing_products_response import CountBillingProductsResponse from ..types.billing_subscription_discount import BillingSubscriptionDiscount from ..types.billing_product_pricing import BillingProductPricing -from .types.upsert_billing_subscription_response import UpsertBillingSubscriptionResponse -from ..core.serialization import convert_and_respect_annotation_metadata +from .types.create_billing_subscriptions_request_body_trial_end_setting import ( + CreateBillingSubscriptionsRequestBodyTrialEndSetting, +) +from .types.upsert_billing_subscription_response import ( + UpsertBillingSubscriptionResponse, +) from ..core.client_wrapper import AsyncClientWrapper # this is used as the default value for optional parameters @@ -297,6 +320,7 @@ def upsert_billing_customer( meta: typing.Dict[str, str], name: str, company_id: typing.Optional[str] = OMIT, + default_payment_method_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertBillingCustomerResponse: """ @@ -314,6 +338,8 @@ def upsert_billing_customer( company_id : typing.Optional[str] + default_payment_method_id : typing.Optional[str] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -342,6 +368,7 @@ def upsert_billing_customer( method="POST", json={ "company_id": company_id, + "default_payment_method_id": default_payment_method_id, "email": email, "external_id": external_id, "failed_to_import": failed_to_import, @@ -1096,7 +1123,6 @@ def list_payment_methods( *, customer_external_id: str, company_id: typing.Optional[str] = None, - subscription_external_id: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -1108,8 +1134,6 @@ def list_payment_methods( company_id : typing.Optional[str] - subscription_external_id : typing.Optional[str] - limit : typing.Optional[int] Page limit (default 100) @@ -1141,7 +1165,6 @@ def list_payment_methods( params={ "company_id": company_id, "customer_external_id": customer_external_id, - "subscription_external_id": subscription_external_id, "limit": limit, "offset": offset, }, @@ -1216,7 +1239,6 @@ def upsert_payment_method( card_exp_month: typing.Optional[int] = OMIT, card_exp_year: typing.Optional[int] = OMIT, card_last_4: typing.Optional[str] = OMIT, - subscription_external_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertPaymentMethodResponse: """ @@ -1246,8 +1268,6 @@ def upsert_payment_method( card_last_4 : typing.Optional[str] - subscription_external_id : typing.Optional[str] - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1285,7 +1305,6 @@ def upsert_payment_method( "customer_external_id": customer_external_id, "external_id": external_id, "payment_method_type": payment_method_type, - "subscription_external_id": subscription_external_id, }, headers={ "content-type": "application/json", @@ -1353,7 +1372,7 @@ def search_billing_prices( ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, q: typing.Optional[str] = None, interval: typing.Optional[str] = None, - usage_type: typing.Optional[str] = None, + usage_type: typing.Optional[SearchBillingPricesRequestUsageType] = None, price: typing.Optional[int] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, @@ -1368,7 +1387,7 @@ def search_billing_prices( interval : typing.Optional[str] - usage_type : typing.Optional[str] + usage_type : typing.Optional[SearchBillingPricesRequestUsageType] price : typing.Optional[int] @@ -1467,13 +1486,16 @@ def upsert_billing_price( self, *, currency: str, + external_account_id: str, interval: str, is_active: bool, price: int, price_external_id: str, + price_tiers: typing.Sequence[CreateBillingPriceTierRequestBody], product_external_id: str, usage_type: CreateBillingPriceRequestBodyUsageType, meter_id: typing.Optional[str] = OMIT, + tier_mode: typing.Optional[CreateBillingPriceRequestBodyTierMode] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertBillingPriceResponse: """ @@ -1481,6 +1503,8 @@ def upsert_billing_price( ---------- currency : str + external_account_id : str + interval : str is_active : bool @@ -1489,12 +1513,16 @@ def upsert_billing_price( price_external_id : str + price_tiers : typing.Sequence[CreateBillingPriceTierRequestBody] + product_external_id : str usage_type : CreateBillingPriceRequestBodyUsageType meter_id : typing.Optional[str] + tier_mode : typing.Optional[CreateBillingPriceRequestBodyTierMode] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1505,17 +1533,23 @@ def upsert_billing_price( Examples -------- - from schematic import Schematic + from schematic import CreateBillingPriceTierRequestBody, Schematic client = Schematic( api_key="YOUR_API_KEY", ) client.billing.upsert_billing_price( currency="currency", + external_account_id="external_account_id", interval="interval", is_active=True, price=1, price_external_id="price_external_id", + price_tiers=[ + CreateBillingPriceTierRequestBody( + price_external_id="price_external_id", + ) + ], product_external_id="product_external_id", usage_type="licensed", ) @@ -1525,12 +1559,19 @@ def upsert_billing_price( method="POST", json={ "currency": currency, + "external_account_id": external_account_id, "interval": interval, "is_active": is_active, "meter_id": meter_id, "price": price, "price_external_id": price_external_id, + "price_tiers": convert_and_respect_annotation_metadata( + object_=price_tiers, + annotation=typing.Sequence[CreateBillingPriceTierRequestBody], + direction="write", + ), "product_external_id": product_external_id, + "tier_mode": tier_mode, "usage_type": usage_type, }, headers={ @@ -1593,6 +1634,96 @@ def upsert_billing_price( raise core_api_error_ApiError(status_code=_response.status_code, body=_response.text) raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) + def delete_billing_product( + self, + billing_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, + ) -> DeleteBillingProductResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteBillingProductResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.billing.delete_billing_product( + billing_id="billing_id", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/product/{jsonable_encoder(billing_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DeleteBillingProductResponse, + parse_obj_as( + type_=DeleteBillingProductResponse, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 401: + raise UnauthorizedError( + typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 500: + raise InternalServerError( + typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError(status_code=_response.status_code, body=_response.text) + raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) + def list_product_prices( self, *, @@ -1721,7 +1852,10 @@ def list_product_prices( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_product_price( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + billing_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteProductPriceResponse: """ Parameters @@ -1810,6 +1944,7 @@ def delete_product_price( def upsert_billing_product( self, *, + active: bool, currency: str, external_id: str, name: str, @@ -1820,6 +1955,8 @@ def upsert_billing_product( """ Parameters ---------- + active : bool + currency : str external_id : str @@ -1846,6 +1983,7 @@ def upsert_billing_product( api_key="YOUR_API_KEY", ) client.billing.upsert_billing_product( + active=True, currency="currency", external_id="external_id", name="name", @@ -1857,6 +1995,7 @@ def upsert_billing_product( "billing/product/upsert", method="POST", json={ + "active": active, "currency": currency, "external_id": external_id, "name": name, @@ -2180,6 +2319,7 @@ def count_billing_products( def upsert_billing_subscription( self, *, + cancel_at_period_end: bool, currency: str, customer_external_id: str, discounts: typing.Sequence[BillingSubscriptionDiscount], @@ -2187,18 +2327,22 @@ def upsert_billing_subscription( product_external_ids: typing.Sequence[BillingProductPricing], subscription_external_id: str, total_price: int, + cancel_at: typing.Optional[int] = OMIT, + default_payment_method_id: typing.Optional[str] = OMIT, interval: typing.Optional[str] = OMIT, metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, period_end: typing.Optional[int] = OMIT, period_start: typing.Optional[int] = OMIT, status: typing.Optional[str] = OMIT, trial_end: typing.Optional[int] = OMIT, - trial_end_setting: typing.Optional[str] = OMIT, + trial_end_setting: typing.Optional[CreateBillingSubscriptionsRequestBodyTrialEndSetting] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertBillingSubscriptionResponse: """ Parameters ---------- + cancel_at_period_end : bool + currency : str customer_external_id : str @@ -2213,6 +2357,10 @@ def upsert_billing_subscription( total_price : int + cancel_at : typing.Optional[int] + + default_payment_method_id : typing.Optional[str] + interval : typing.Optional[str] metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] @@ -2225,7 +2373,7 @@ def upsert_billing_subscription( trial_end : typing.Optional[int] - trial_end_setting : typing.Optional[str] + trial_end_setting : typing.Optional[CreateBillingSubscriptionsRequestBodyTrialEndSetting] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -2249,6 +2397,7 @@ def upsert_billing_subscription( api_key="YOUR_API_KEY", ) client.billing.upsert_billing_subscription( + cancel_at_period_end=True, currency="currency", customer_external_id="customer_external_id", discounts=[ @@ -2272,7 +2421,7 @@ def upsert_billing_subscription( price_external_id="price_external_id", product_external_id="product_external_id", quantity=1, - usage_type="usage_type", + usage_type="licensed", ) ], subscription_external_id="subscription_external_id", @@ -2283,10 +2432,15 @@ def upsert_billing_subscription( "billing/subscription/upsert", method="POST", json={ + "cancel_at": cancel_at, + "cancel_at_period_end": cancel_at_period_end, "currency": currency, "customer_external_id": customer_external_id, + "default_payment_method_id": default_payment_method_id, "discounts": convert_and_respect_annotation_metadata( - object_=discounts, annotation=typing.Sequence[BillingSubscriptionDiscount], direction="write" + object_=discounts, + annotation=typing.Sequence[BillingSubscriptionDiscount], + direction="write", ), "expired_at": expired_at, "interval": interval, @@ -2294,7 +2448,9 @@ def upsert_billing_subscription( "period_end": period_end, "period_start": period_start, "product_external_ids": convert_and_respect_annotation_metadata( - object_=product_external_ids, annotation=typing.Sequence[BillingProductPricing], direction="write" + object_=product_external_ids, + annotation=typing.Sequence[BillingProductPricing], + direction="write", ), "status": status, "subscription_external_id": subscription_external_id, @@ -2631,6 +2787,7 @@ async def upsert_billing_customer( meta: typing.Dict[str, str], name: str, company_id: typing.Optional[str] = OMIT, + default_payment_method_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertBillingCustomerResponse: """ @@ -2648,6 +2805,8 @@ async def upsert_billing_customer( company_id : typing.Optional[str] + default_payment_method_id : typing.Optional[str] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -2684,6 +2843,7 @@ async def main() -> None: method="POST", json={ "company_id": company_id, + "default_payment_method_id": default_payment_method_id, "email": email, "external_id": external_id, "failed_to_import": failed_to_import, @@ -3486,7 +3646,6 @@ async def list_payment_methods( *, customer_external_id: str, company_id: typing.Optional[str] = None, - subscription_external_id: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -3498,8 +3657,6 @@ async def list_payment_methods( company_id : typing.Optional[str] - subscription_external_id : typing.Optional[str] - limit : typing.Optional[int] Page limit (default 100) @@ -3539,7 +3696,6 @@ async def main() -> None: params={ "company_id": company_id, "customer_external_id": customer_external_id, - "subscription_external_id": subscription_external_id, "limit": limit, "offset": offset, }, @@ -3614,7 +3770,6 @@ async def upsert_payment_method( card_exp_month: typing.Optional[int] = OMIT, card_exp_year: typing.Optional[int] = OMIT, card_last_4: typing.Optional[str] = OMIT, - subscription_external_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertPaymentMethodResponse: """ @@ -3644,8 +3799,6 @@ async def upsert_payment_method( card_last_4 : typing.Optional[str] - subscription_external_id : typing.Optional[str] - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -3691,7 +3844,6 @@ async def main() -> None: "customer_external_id": customer_external_id, "external_id": external_id, "payment_method_type": payment_method_type, - "subscription_external_id": subscription_external_id, }, headers={ "content-type": "application/json", @@ -3759,7 +3911,7 @@ async def search_billing_prices( ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, q: typing.Optional[str] = None, interval: typing.Optional[str] = None, - usage_type: typing.Optional[str] = None, + usage_type: typing.Optional[SearchBillingPricesRequestUsageType] = None, price: typing.Optional[int] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, @@ -3774,7 +3926,7 @@ async def search_billing_prices( interval : typing.Optional[str] - usage_type : typing.Optional[str] + usage_type : typing.Optional[SearchBillingPricesRequestUsageType] price : typing.Optional[int] @@ -3881,13 +4033,16 @@ async def upsert_billing_price( self, *, currency: str, + external_account_id: str, interval: str, is_active: bool, price: int, price_external_id: str, + price_tiers: typing.Sequence[CreateBillingPriceTierRequestBody], product_external_id: str, usage_type: CreateBillingPriceRequestBodyUsageType, meter_id: typing.Optional[str] = OMIT, + tier_mode: typing.Optional[CreateBillingPriceRequestBodyTierMode] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertBillingPriceResponse: """ @@ -3895,6 +4050,8 @@ async def upsert_billing_price( ---------- currency : str + external_account_id : str + interval : str is_active : bool @@ -3903,12 +4060,16 @@ async def upsert_billing_price( price_external_id : str + price_tiers : typing.Sequence[CreateBillingPriceTierRequestBody] + product_external_id : str usage_type : CreateBillingPriceRequestBodyUsageType meter_id : typing.Optional[str] + tier_mode : typing.Optional[CreateBillingPriceRequestBodyTierMode] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -3921,7 +4082,7 @@ async def upsert_billing_price( -------- import asyncio - from schematic import AsyncSchematic + from schematic import AsyncSchematic, CreateBillingPriceTierRequestBody client = AsyncSchematic( api_key="YOUR_API_KEY", @@ -3931,10 +4092,16 @@ async def upsert_billing_price( async def main() -> None: await client.billing.upsert_billing_price( currency="currency", + external_account_id="external_account_id", interval="interval", is_active=True, price=1, price_external_id="price_external_id", + price_tiers=[ + CreateBillingPriceTierRequestBody( + price_external_id="price_external_id", + ) + ], product_external_id="product_external_id", usage_type="licensed", ) @@ -3947,12 +4114,19 @@ async def main() -> None: method="POST", json={ "currency": currency, + "external_account_id": external_account_id, "interval": interval, "is_active": is_active, "meter_id": meter_id, "price": price, "price_external_id": price_external_id, + "price_tiers": convert_and_respect_annotation_metadata( + object_=price_tiers, + annotation=typing.Sequence[CreateBillingPriceTierRequestBody], + direction="write", + ), "product_external_id": product_external_id, + "tier_mode": tier_mode, "usage_type": usage_type, }, headers={ @@ -4015,6 +4189,104 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response.text) raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) + async def delete_billing_product( + self, + billing_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, + ) -> DeleteBillingProductResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteBillingProductResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.billing.delete_billing_product( + billing_id="billing_id", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/product/{jsonable_encoder(billing_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DeleteBillingProductResponse, + parse_obj_as( + type_=DeleteBillingProductResponse, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 401: + raise UnauthorizedError( + typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 500: + raise InternalServerError( + typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError(status_code=_response.status_code, body=_response.text) + raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) + async def list_product_prices( self, *, @@ -4151,7 +4423,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_product_price( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + billing_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteProductPriceResponse: """ Parameters @@ -4248,6 +4523,7 @@ async def main() -> None: async def upsert_billing_product( self, *, + active: bool, currency: str, external_id: str, name: str, @@ -4258,6 +4534,8 @@ async def upsert_billing_product( """ Parameters ---------- + active : bool + currency : str external_id : str @@ -4289,6 +4567,7 @@ async def upsert_billing_product( async def main() -> None: await client.billing.upsert_billing_product( + active=True, currency="currency", external_id="external_id", name="name", @@ -4303,6 +4582,7 @@ async def main() -> None: "billing/product/upsert", method="POST", json={ + "active": active, "currency": currency, "external_id": external_id, "name": name, @@ -4642,6 +4922,7 @@ async def main() -> None: async def upsert_billing_subscription( self, *, + cancel_at_period_end: bool, currency: str, customer_external_id: str, discounts: typing.Sequence[BillingSubscriptionDiscount], @@ -4649,18 +4930,22 @@ async def upsert_billing_subscription( product_external_ids: typing.Sequence[BillingProductPricing], subscription_external_id: str, total_price: int, + cancel_at: typing.Optional[int] = OMIT, + default_payment_method_id: typing.Optional[str] = OMIT, interval: typing.Optional[str] = OMIT, metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, period_end: typing.Optional[int] = OMIT, period_start: typing.Optional[int] = OMIT, status: typing.Optional[str] = OMIT, trial_end: typing.Optional[int] = OMIT, - trial_end_setting: typing.Optional[str] = OMIT, + trial_end_setting: typing.Optional[CreateBillingSubscriptionsRequestBodyTrialEndSetting] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertBillingSubscriptionResponse: """ Parameters ---------- + cancel_at_period_end : bool + currency : str customer_external_id : str @@ -4675,6 +4960,10 @@ async def upsert_billing_subscription( total_price : int + cancel_at : typing.Optional[int] + + default_payment_method_id : typing.Optional[str] + interval : typing.Optional[str] metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] @@ -4687,7 +4976,7 @@ async def upsert_billing_subscription( trial_end : typing.Optional[int] - trial_end_setting : typing.Optional[str] + trial_end_setting : typing.Optional[CreateBillingSubscriptionsRequestBodyTrialEndSetting] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -4715,6 +5004,7 @@ async def upsert_billing_subscription( async def main() -> None: await client.billing.upsert_billing_subscription( + cancel_at_period_end=True, currency="currency", customer_external_id="customer_external_id", discounts=[ @@ -4738,7 +5028,7 @@ async def main() -> None: price_external_id="price_external_id", product_external_id="product_external_id", quantity=1, - usage_type="usage_type", + usage_type="licensed", ) ], subscription_external_id="subscription_external_id", @@ -4752,10 +5042,15 @@ async def main() -> None: "billing/subscription/upsert", method="POST", json={ + "cancel_at": cancel_at, + "cancel_at_period_end": cancel_at_period_end, "currency": currency, "customer_external_id": customer_external_id, + "default_payment_method_id": default_payment_method_id, "discounts": convert_and_respect_annotation_metadata( - object_=discounts, annotation=typing.Sequence[BillingSubscriptionDiscount], direction="write" + object_=discounts, + annotation=typing.Sequence[BillingSubscriptionDiscount], + direction="write", ), "expired_at": expired_at, "interval": interval, @@ -4763,7 +5058,9 @@ async def main() -> None: "period_end": period_end, "period_start": period_start, "product_external_ids": convert_and_respect_annotation_metadata( - object_=product_external_ids, annotation=typing.Sequence[BillingProductPricing], direction="write" + object_=product_external_ids, + annotation=typing.Sequence[BillingProductPricing], + direction="write", ), "status": status, "subscription_external_id": subscription_external_id, diff --git a/src/schematic/billing/types/__init__.py b/src/schematic/billing/types/__init__.py index df57ebb..bc8bb7b 100644 --- a/src/schematic/billing/types/__init__.py +++ b/src/schematic/billing/types/__init__.py @@ -6,7 +6,12 @@ from .count_billing_products_response_params_price_usage_type import CountBillingProductsResponseParamsPriceUsageType from .count_customers_params import CountCustomersParams from .count_customers_response import CountCustomersResponse +from .create_billing_price_request_body_tier_mode import CreateBillingPriceRequestBodyTierMode from .create_billing_price_request_body_usage_type import CreateBillingPriceRequestBodyUsageType +from .create_billing_subscriptions_request_body_trial_end_setting import ( + CreateBillingSubscriptionsRequestBodyTrialEndSetting, +) +from .delete_billing_product_response import DeleteBillingProductResponse from .delete_product_price_response import DeleteProductPriceResponse from .list_billing_products_params import ListBillingProductsParams from .list_billing_products_request_price_usage_type import ListBillingProductsRequestPriceUsageType @@ -27,7 +32,9 @@ from .list_product_prices_response import ListProductPricesResponse from .list_product_prices_response_params_price_usage_type import ListProductPricesResponseParamsPriceUsageType from .search_billing_prices_params import SearchBillingPricesParams +from .search_billing_prices_request_usage_type import SearchBillingPricesRequestUsageType from .search_billing_prices_response import SearchBillingPricesResponse +from .search_billing_prices_response_params_usage_type import SearchBillingPricesResponseParamsUsageType from .upsert_billing_coupon_response import UpsertBillingCouponResponse from .upsert_billing_customer_response import UpsertBillingCustomerResponse from .upsert_billing_meter_response import UpsertBillingMeterResponse @@ -44,7 +51,10 @@ "CountBillingProductsResponseParamsPriceUsageType", "CountCustomersParams", "CountCustomersResponse", + "CreateBillingPriceRequestBodyTierMode", "CreateBillingPriceRequestBodyUsageType", + "CreateBillingSubscriptionsRequestBodyTrialEndSetting", + "DeleteBillingProductResponse", "DeleteProductPriceResponse", "ListBillingProductsParams", "ListBillingProductsRequestPriceUsageType", @@ -65,7 +75,9 @@ "ListProductPricesResponse", "ListProductPricesResponseParamsPriceUsageType", "SearchBillingPricesParams", + "SearchBillingPricesRequestUsageType", "SearchBillingPricesResponse", + "SearchBillingPricesResponseParamsUsageType", "UpsertBillingCouponResponse", "UpsertBillingCustomerResponse", "UpsertBillingMeterResponse", diff --git a/src/schematic/billing/types/count_billing_products_params.py b/src/schematic/billing/types/count_billing_products_params.py index 4e53984..2177b07 100644 --- a/src/schematic/billing/types/count_billing_products_params.py +++ b/src/schematic/billing/types/count_billing_products_params.py @@ -3,7 +3,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing import pydantic -from .count_billing_products_response_params_price_usage_type import CountBillingProductsResponseParamsPriceUsageType +from .count_billing_products_response_params_price_usage_type import ( + CountBillingProductsResponseParamsPriceUsageType, +) from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/billing/types/create_billing_price_request_body_tier_mode.py b/src/schematic/billing/types/create_billing_price_request_body_tier_mode.py new file mode 100644 index 0000000..d32a69b --- /dev/null +++ b/src/schematic/billing/types/create_billing_price_request_body_tier_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateBillingPriceRequestBodyTierMode = typing.Union[typing.Literal["volume", "graduated"], typing.Any] diff --git a/src/schematic/billing/types/create_billing_subscriptions_request_body_trial_end_setting.py b/src/schematic/billing/types/create_billing_subscriptions_request_body_trial_end_setting.py new file mode 100644 index 0000000..5f1ae49 --- /dev/null +++ b/src/schematic/billing/types/create_billing_subscriptions_request_body_trial_end_setting.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateBillingSubscriptionsRequestBodyTrialEndSetting = typing.Union[typing.Literal["subscribe", "cancel"], typing.Any] diff --git a/src/schematic/billing/types/delete_billing_product_response.py b/src/schematic/billing/types/delete_billing_product_response.py new file mode 100644 index 0000000..7645e04 --- /dev/null +++ b/src/schematic/billing/types/delete_billing_product_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +from ...core.pydantic_utilities import UniversalBaseModel +from ...types.delete_response import DeleteResponse +import typing +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2 + + +class DeleteBillingProductResponse(UniversalBaseModel): + data: DeleteResponse + params: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/billing/types/list_billing_products_params.py b/src/schematic/billing/types/list_billing_products_params.py index a644cb3..1cb21e3 100644 --- a/src/schematic/billing/types/list_billing_products_params.py +++ b/src/schematic/billing/types/list_billing_products_params.py @@ -3,7 +3,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing import pydantic -from .list_billing_products_response_params_price_usage_type import ListBillingProductsResponseParamsPriceUsageType +from .list_billing_products_response_params_price_usage_type import ( + ListBillingProductsResponseParamsPriceUsageType, +) from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/billing/types/list_billing_products_response.py b/src/schematic/billing/types/list_billing_products_response.py index 0af53a4..9146927 100644 --- a/src/schematic/billing/types/list_billing_products_response.py +++ b/src/schematic/billing/types/list_billing_products_response.py @@ -2,7 +2,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing -from ...types.billing_product_detail_response_data import BillingProductDetailResponseData +from ...types.billing_product_detail_response_data import ( + BillingProductDetailResponseData, +) import pydantic from .list_billing_products_params import ListBillingProductsParams from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/billing/types/list_customers_response.py b/src/schematic/billing/types/list_customers_response.py index de37d23..6054bff 100644 --- a/src/schematic/billing/types/list_customers_response.py +++ b/src/schematic/billing/types/list_customers_response.py @@ -2,7 +2,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing -from ...types.billing_customer_with_subscriptions_response_data import BillingCustomerWithSubscriptionsResponseData +from ...types.billing_customer_with_subscriptions_response_data import ( + BillingCustomerWithSubscriptionsResponseData, +) import pydantic from .list_customers_params import ListCustomersParams from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/billing/types/list_payment_methods_params.py b/src/schematic/billing/types/list_payment_methods_params.py index 7d8b66a..ce449d0 100644 --- a/src/schematic/billing/types/list_payment_methods_params.py +++ b/src/schematic/billing/types/list_payment_methods_params.py @@ -23,8 +23,6 @@ class ListPaymentMethodsParams(UniversalBaseModel): Page offset (default 0) """ - subscription_external_id: typing.Optional[str] = None - if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: diff --git a/src/schematic/billing/types/list_product_prices_params.py b/src/schematic/billing/types/list_product_prices_params.py index 304b776..8101a04 100644 --- a/src/schematic/billing/types/list_product_prices_params.py +++ b/src/schematic/billing/types/list_product_prices_params.py @@ -3,7 +3,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing import pydantic -from .list_product_prices_response_params_price_usage_type import ListProductPricesResponseParamsPriceUsageType +from .list_product_prices_response_params_price_usage_type import ( + ListProductPricesResponseParamsPriceUsageType, +) from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/billing/types/search_billing_prices_params.py b/src/schematic/billing/types/search_billing_prices_params.py index 1ee0a97..1780a83 100644 --- a/src/schematic/billing/types/search_billing_prices_params.py +++ b/src/schematic/billing/types/search_billing_prices_params.py @@ -3,6 +3,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing import pydantic +from .search_billing_prices_response_params_usage_type import ( + SearchBillingPricesResponseParamsUsageType, +) from ...core.pydantic_utilities import IS_PYDANTIC_V2 @@ -25,7 +28,7 @@ class SearchBillingPricesParams(UniversalBaseModel): price: typing.Optional[int] = None q: typing.Optional[str] = None - usage_type: typing.Optional[str] = None + usage_type: typing.Optional[SearchBillingPricesResponseParamsUsageType] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/schematic/billing/types/search_billing_prices_request_usage_type.py b/src/schematic/billing/types/search_billing_prices_request_usage_type.py new file mode 100644 index 0000000..1e63700 --- /dev/null +++ b/src/schematic/billing/types/search_billing_prices_request_usage_type.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +SearchBillingPricesRequestUsageType = typing.Union[typing.Literal["licensed", "metered"], typing.Any] diff --git a/src/schematic/billing/types/search_billing_prices_response_params_usage_type.py b/src/schematic/billing/types/search_billing_prices_response_params_usage_type.py new file mode 100644 index 0000000..50ea3d2 --- /dev/null +++ b/src/schematic/billing/types/search_billing_prices_response_params_usage_type.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +SearchBillingPricesResponseParamsUsageType = typing.Union[typing.Literal["licensed", "metered"], typing.Any] diff --git a/src/schematic/checkout/client.py b/src/schematic/checkout/client.py index 937cb4f..fe35e5b 100644 --- a/src/schematic/checkout/client.py +++ b/src/schematic/checkout/client.py @@ -18,7 +18,9 @@ from .types.get_checkout_data_response import GetCheckoutDataResponse from .types.preview_checkout_internal_response import PreviewCheckoutInternalResponse import datetime as dt -from .types.update_customer_subscription_trial_end_response import UpdateCustomerSubscriptionTrialEndResponse +from .types.update_customer_subscription_trial_end_response import ( + UpdateCustomerSubscriptionTrialEndResponse, +) from ..core.jsonable_encoder import jsonable_encoder from ..errors.not_found_error import NotFoundError from ..core.client_wrapper import AsyncClientWrapper @@ -105,14 +107,18 @@ def internal( method="POST", json={ "add_on_ids": convert_and_respect_annotation_metadata( - object_=add_on_ids, annotation=typing.Sequence[UpdateAddOnRequestBody], direction="write" + object_=add_on_ids, + annotation=typing.Sequence[UpdateAddOnRequestBody], + direction="write", ), "company_id": company_id, "coupon_external_id": coupon_external_id, "new_plan_id": new_plan_id, "new_price_id": new_price_id, "pay_in_advance": convert_and_respect_annotation_metadata( - object_=pay_in_advance, annotation=typing.Sequence[UpdatePayInAdvanceRequestBody], direction="write" + object_=pay_in_advance, + annotation=typing.Sequence[UpdatePayInAdvanceRequestBody], + direction="write", ), "payment_method_id": payment_method_id, "promo_code": promo_code, @@ -348,14 +354,18 @@ def preview_checkout_internal( method="POST", json={ "add_on_ids": convert_and_respect_annotation_metadata( - object_=add_on_ids, annotation=typing.Sequence[UpdateAddOnRequestBody], direction="write" + object_=add_on_ids, + annotation=typing.Sequence[UpdateAddOnRequestBody], + direction="write", ), "company_id": company_id, "coupon_external_id": coupon_external_id, "new_plan_id": new_plan_id, "new_price_id": new_price_id, "pay_in_advance": convert_and_respect_annotation_metadata( - object_=pay_in_advance, annotation=typing.Sequence[UpdatePayInAdvanceRequestBody], direction="write" + object_=pay_in_advance, + annotation=typing.Sequence[UpdatePayInAdvanceRequestBody], + direction="write", ), "payment_method_id": payment_method_id, "promo_code": promo_code, @@ -614,14 +624,18 @@ async def main() -> None: method="POST", json={ "add_on_ids": convert_and_respect_annotation_metadata( - object_=add_on_ids, annotation=typing.Sequence[UpdateAddOnRequestBody], direction="write" + object_=add_on_ids, + annotation=typing.Sequence[UpdateAddOnRequestBody], + direction="write", ), "company_id": company_id, "coupon_external_id": coupon_external_id, "new_plan_id": new_plan_id, "new_price_id": new_price_id, "pay_in_advance": convert_and_respect_annotation_metadata( - object_=pay_in_advance, annotation=typing.Sequence[UpdatePayInAdvanceRequestBody], direction="write" + object_=pay_in_advance, + annotation=typing.Sequence[UpdatePayInAdvanceRequestBody], + direction="write", ), "payment_method_id": payment_method_id, "promo_code": promo_code, @@ -873,14 +887,18 @@ async def main() -> None: method="POST", json={ "add_on_ids": convert_and_respect_annotation_metadata( - object_=add_on_ids, annotation=typing.Sequence[UpdateAddOnRequestBody], direction="write" + object_=add_on_ids, + annotation=typing.Sequence[UpdateAddOnRequestBody], + direction="write", ), "company_id": company_id, "coupon_external_id": coupon_external_id, "new_plan_id": new_plan_id, "new_price_id": new_price_id, "pay_in_advance": convert_and_respect_annotation_metadata( - object_=pay_in_advance, annotation=typing.Sequence[UpdatePayInAdvanceRequestBody], direction="write" + object_=pay_in_advance, + annotation=typing.Sequence[UpdatePayInAdvanceRequestBody], + direction="write", ), "payment_method_id": payment_method_id, "promo_code": promo_code, diff --git a/src/schematic/checkout/types/preview_checkout_internal_response.py b/src/schematic/checkout/types/preview_checkout_internal_response.py index 967a6c8..ffb57a0 100644 --- a/src/schematic/checkout/types/preview_checkout_internal_response.py +++ b/src/schematic/checkout/types/preview_checkout_internal_response.py @@ -1,7 +1,9 @@ # This file was auto-generated by Fern from our API Definition. from ...core.pydantic_utilities import UniversalBaseModel -from ...types.preview_subscription_change_response_data import PreviewSubscriptionChangeResponseData +from ...types.preview_subscription_change_response_data import ( + PreviewSubscriptionChangeResponseData, +) import typing import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/client.py b/src/schematic/companies/client.py index 51676cd..1867e36 100644 --- a/src/schematic/companies/client.py +++ b/src/schematic/companies/client.py @@ -24,32 +24,58 @@ from .types.lookup_company_response import LookupCompanyResponse from .types.get_active_deals_response import GetActiveDealsResponse from .types.list_company_memberships_response import ListCompanyMembershipsResponse -from .types.get_or_create_company_membership_response import GetOrCreateCompanyMembershipResponse +from .types.get_or_create_company_membership_response import ( + GetOrCreateCompanyMembershipResponse, +) from .types.delete_company_membership_response import DeleteCompanyMembershipResponse -from .types.get_active_company_subscription_response import GetActiveCompanySubscriptionResponse +from .types.get_active_company_subscription_response import ( + GetActiveCompanySubscriptionResponse, +) from .types.upsert_company_trait_response import UpsertCompanyTraitResponse -from .types.list_entity_key_definitions_request_entity_type import ListEntityKeyDefinitionsRequestEntityType +from .types.list_entity_key_definitions_request_entity_type import ( + ListEntityKeyDefinitionsRequestEntityType, +) from .types.list_entity_key_definitions_response import ListEntityKeyDefinitionsResponse -from .types.count_entity_key_definitions_request_entity_type import CountEntityKeyDefinitionsRequestEntityType -from .types.count_entity_key_definitions_response import CountEntityKeyDefinitionsResponse -from .types.list_entity_trait_definitions_request_entity_type import ListEntityTraitDefinitionsRequestEntityType -from .types.list_entity_trait_definitions_request_trait_type import ListEntityTraitDefinitionsRequestTraitType -from .types.list_entity_trait_definitions_response import ListEntityTraitDefinitionsResponse +from .types.count_entity_key_definitions_request_entity_type import ( + CountEntityKeyDefinitionsRequestEntityType, +) +from .types.count_entity_key_definitions_response import ( + CountEntityKeyDefinitionsResponse, +) +from .types.list_entity_trait_definitions_request_entity_type import ( + ListEntityTraitDefinitionsRequestEntityType, +) +from .types.list_entity_trait_definitions_request_trait_type import ( + ListEntityTraitDefinitionsRequestTraitType, +) +from .types.list_entity_trait_definitions_response import ( + ListEntityTraitDefinitionsResponse, +) from .types.create_entity_trait_definition_request_body_entity_type import ( CreateEntityTraitDefinitionRequestBodyEntityType, ) from .types.create_entity_trait_definition_request_body_trait_type import ( CreateEntityTraitDefinitionRequestBodyTraitType, ) -from .types.get_or_create_entity_trait_definition_response import GetOrCreateEntityTraitDefinitionResponse +from .types.get_or_create_entity_trait_definition_response import ( + GetOrCreateEntityTraitDefinitionResponse, +) from .types.get_entity_trait_definition_response import GetEntityTraitDefinitionResponse from .types.update_entity_trait_definition_request_body_trait_type import ( UpdateEntityTraitDefinitionRequestBodyTraitType, ) -from .types.update_entity_trait_definition_response import UpdateEntityTraitDefinitionResponse -from .types.count_entity_trait_definitions_request_entity_type import CountEntityTraitDefinitionsRequestEntityType -from .types.count_entity_trait_definitions_request_trait_type import CountEntityTraitDefinitionsRequestTraitType -from .types.count_entity_trait_definitions_response import CountEntityTraitDefinitionsResponse +from .types.update_entity_trait_definition_response import ( + UpdateEntityTraitDefinitionResponse, +) +from .types.count_entity_trait_definitions_request_entity_type import ( + CountEntityTraitDefinitionsRequestEntityType, +) +from .types.count_entity_trait_definitions_request_trait_type import ( + CountEntityTraitDefinitionsRequestTraitType, +) +from .types.count_entity_trait_definitions_response import ( + CountEntityTraitDefinitionsResponse, +) from .types.get_entity_trait_values_response import GetEntityTraitValuesResponse from .types.upsert_user_trait_response import UpsertUserTraitResponse from .types.list_users_response import ListUsersResponse @@ -307,7 +333,10 @@ def upsert_company( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_company( - self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetCompanyResponse: """ Parameters @@ -394,7 +423,10 @@ def get_company( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_company( - self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteCompanyResponse: """ Parameters @@ -717,7 +749,10 @@ def create_company( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_company_by_keys( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + self, + *, + keys: typing.Dict[str, str], + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteCompanyByKeysResponse: """ Parameters @@ -1111,7 +1146,11 @@ def list_company_memberships( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_or_create_company_membership( - self, *, company_id: str, user_id: str, request_options: typing.Optional[RequestOptions] = None + self, + *, + company_id: str, + user_id: str, + request_options: typing.Optional[RequestOptions] = None, ) -> GetOrCreateCompanyMembershipResponse: """ Parameters @@ -1208,7 +1247,10 @@ def get_or_create_company_membership( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_company_membership( - self, company_membership_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_membership_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteCompanyMembershipResponse: """ Parameters @@ -1952,7 +1994,10 @@ def get_or_create_entity_trait_definition( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_entity_trait_definition( - self, entity_trait_definition_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + entity_trait_definition_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetEntityTraitDefinitionResponse: """ Parameters @@ -3143,7 +3188,10 @@ def create_user( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_user_by_keys( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + self, + *, + keys: typing.Dict[str, str], + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteUserByKeysResponse: """ Parameters @@ -3583,7 +3631,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_company( - self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetCompanyResponse: """ Parameters @@ -3678,7 +3729,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_company( - self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteCompanyResponse: """ Parameters @@ -4025,7 +4079,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_company_by_keys( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + self, + *, + keys: typing.Dict[str, str], + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteCompanyByKeysResponse: """ Parameters @@ -4451,7 +4508,11 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_or_create_company_membership( - self, *, company_id: str, user_id: str, request_options: typing.Optional[RequestOptions] = None + self, + *, + company_id: str, + user_id: str, + request_options: typing.Optional[RequestOptions] = None, ) -> GetOrCreateCompanyMembershipResponse: """ Parameters @@ -4556,7 +4617,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_company_membership( - self, company_membership_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_membership_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteCompanyMembershipResponse: """ Parameters @@ -5356,7 +5420,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_entity_trait_definition( - self, entity_trait_definition_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + entity_trait_definition_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetEntityTraitDefinitionResponse: """ Parameters @@ -6637,7 +6704,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_user_by_keys( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + self, + *, + keys: typing.Dict[str, str], + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteUserByKeysResponse: """ Parameters diff --git a/src/schematic/companies/types/count_entity_key_definitions_params.py b/src/schematic/companies/types/count_entity_key_definitions_params.py index 33810f4..88df378 100644 --- a/src/schematic/companies/types/count_entity_key_definitions_params.py +++ b/src/schematic/companies/types/count_entity_key_definitions_params.py @@ -2,7 +2,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing -from .count_entity_key_definitions_response_params_entity_type import CountEntityKeyDefinitionsResponseParamsEntityType +from .count_entity_key_definitions_response_params_entity_type import ( + CountEntityKeyDefinitionsResponseParamsEntityType, +) import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/types/get_entity_trait_definition_response.py b/src/schematic/companies/types/get_entity_trait_definition_response.py index 057f58b..626f2d7 100644 --- a/src/schematic/companies/types/get_entity_trait_definition_response.py +++ b/src/schematic/companies/types/get_entity_trait_definition_response.py @@ -1,7 +1,9 @@ # This file was auto-generated by Fern from our API Definition. from ...core.pydantic_utilities import UniversalBaseModel -from ...types.entity_trait_definition_response_data import EntityTraitDefinitionResponseData +from ...types.entity_trait_definition_response_data import ( + EntityTraitDefinitionResponseData, +) import typing import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/types/get_or_create_company_membership_response.py b/src/schematic/companies/types/get_or_create_company_membership_response.py index 996b037..486c4a7 100644 --- a/src/schematic/companies/types/get_or_create_company_membership_response.py +++ b/src/schematic/companies/types/get_or_create_company_membership_response.py @@ -1,7 +1,9 @@ # This file was auto-generated by Fern from our API Definition. from ...core.pydantic_utilities import UniversalBaseModel -from ...types.company_membership_detail_response_data import CompanyMembershipDetailResponseData +from ...types.company_membership_detail_response_data import ( + CompanyMembershipDetailResponseData, +) import typing import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/types/get_or_create_entity_trait_definition_response.py b/src/schematic/companies/types/get_or_create_entity_trait_definition_response.py index f7d0744..710238a 100644 --- a/src/schematic/companies/types/get_or_create_entity_trait_definition_response.py +++ b/src/schematic/companies/types/get_or_create_entity_trait_definition_response.py @@ -1,7 +1,9 @@ # This file was auto-generated by Fern from our API Definition. from ...core.pydantic_utilities import UniversalBaseModel -from ...types.entity_trait_definition_response_data import EntityTraitDefinitionResponseData +from ...types.entity_trait_definition_response_data import ( + EntityTraitDefinitionResponseData, +) import typing import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/types/list_company_memberships_response.py b/src/schematic/companies/types/list_company_memberships_response.py index b0f2ea1..08c82c1 100644 --- a/src/schematic/companies/types/list_company_memberships_response.py +++ b/src/schematic/companies/types/list_company_memberships_response.py @@ -2,7 +2,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing -from ...types.company_membership_detail_response_data import CompanyMembershipDetailResponseData +from ...types.company_membership_detail_response_data import ( + CompanyMembershipDetailResponseData, +) import pydantic from .list_company_memberships_params import ListCompanyMembershipsParams from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/types/list_entity_key_definitions_params.py b/src/schematic/companies/types/list_entity_key_definitions_params.py index a5873f6..d3bd830 100644 --- a/src/schematic/companies/types/list_entity_key_definitions_params.py +++ b/src/schematic/companies/types/list_entity_key_definitions_params.py @@ -2,7 +2,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing -from .list_entity_key_definitions_response_params_entity_type import ListEntityKeyDefinitionsResponseParamsEntityType +from .list_entity_key_definitions_response_params_entity_type import ( + ListEntityKeyDefinitionsResponseParamsEntityType, +) import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/types/list_entity_trait_definitions_params.py b/src/schematic/companies/types/list_entity_trait_definitions_params.py index 0e79fc7..4251b68 100644 --- a/src/schematic/companies/types/list_entity_trait_definitions_params.py +++ b/src/schematic/companies/types/list_entity_trait_definitions_params.py @@ -6,7 +6,9 @@ ListEntityTraitDefinitionsResponseParamsEntityType, ) import pydantic -from .list_entity_trait_definitions_response_params_trait_type import ListEntityTraitDefinitionsResponseParamsTraitType +from .list_entity_trait_definitions_response_params_trait_type import ( + ListEntityTraitDefinitionsResponseParamsTraitType, +) from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/types/list_entity_trait_definitions_response.py b/src/schematic/companies/types/list_entity_trait_definitions_response.py index 09c2a99..f65b30c 100644 --- a/src/schematic/companies/types/list_entity_trait_definitions_response.py +++ b/src/schematic/companies/types/list_entity_trait_definitions_response.py @@ -2,7 +2,9 @@ from ...core.pydantic_utilities import UniversalBaseModel import typing -from ...types.entity_trait_definition_response_data import EntityTraitDefinitionResponseData +from ...types.entity_trait_definition_response_data import ( + EntityTraitDefinitionResponseData, +) import pydantic from .list_entity_trait_definitions_params import ListEntityTraitDefinitionsParams from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/companies/types/update_entity_trait_definition_response.py b/src/schematic/companies/types/update_entity_trait_definition_response.py index 4493b05..54cb4d8 100644 --- a/src/schematic/companies/types/update_entity_trait_definition_response.py +++ b/src/schematic/companies/types/update_entity_trait_definition_response.py @@ -1,7 +1,9 @@ # This file was auto-generated by Fern from our API Definition. from ...core.pydantic_utilities import UniversalBaseModel -from ...types.entity_trait_definition_response_data import EntityTraitDefinitionResponseData +from ...types.entity_trait_definition_response_data import ( + EntityTraitDefinitionResponseData, +) import typing import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/components/client.py b/src/schematic/components/client.py index cf6139b..e711da9 100644 --- a/src/schematic/components/client.py +++ b/src/schematic/components/client.py @@ -12,12 +12,16 @@ from ..errors.internal_server_error import InternalServerError from json.decoder import JSONDecodeError from ..core.api_error import ApiError as core_api_error_ApiError -from .types.create_component_request_body_entity_type import CreateComponentRequestBodyEntityType +from .types.create_component_request_body_entity_type import ( + CreateComponentRequestBodyEntityType, +) from .types.create_component_response import CreateComponentResponse from .types.get_component_response import GetComponentResponse from ..core.jsonable_encoder import jsonable_encoder from ..errors.not_found_error import NotFoundError -from .types.update_component_request_body_entity_type import UpdateComponentRequestBodyEntityType +from .types.update_component_request_body_entity_type import ( + UpdateComponentRequestBodyEntityType, +) from .types.update_component_request_body_state import UpdateComponentRequestBodyState from .types.update_component_response import UpdateComponentResponse from .types.delete_component_response import DeleteComponentResponse @@ -239,7 +243,10 @@ def create_component( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_component( - self, component_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + component_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetComponentResponse: """ Parameters @@ -448,7 +455,10 @@ def update_component( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_component( - self, component_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + component_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteComponentResponse: """ Parameters @@ -955,7 +965,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_component( - self, component_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + component_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetComponentResponse: """ Parameters @@ -1180,7 +1193,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_component( - self, component_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + component_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteComponentResponse: """ Parameters diff --git a/src/schematic/core/client_wrapper.py b/src/schematic/core/client_wrapper.py index 334ec07..9947b8d 100644 --- a/src/schematic/core/client_wrapper.py +++ b/src/schematic/core/client_wrapper.py @@ -16,7 +16,7 @@ def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { "X-Fern-Language": "Python", "X-Fern-SDK-Name": "schematichq", - "X-Fern-SDK-Version": "1.0.6", + "X-Fern-SDK-Version": "1.0.7", } headers["X-Schematic-Api-Key"] = self.api_key return headers @@ -30,7 +30,12 @@ def get_timeout(self) -> typing.Optional[float]: class SyncClientWrapper(BaseClientWrapper): def __init__( - self, *, api_key: str, base_url: str, timeout: typing.Optional[float] = None, httpx_client: httpx.Client + self, + *, + api_key: str, + base_url: str, + timeout: typing.Optional[float] = None, + httpx_client: httpx.Client, ): super().__init__(api_key=api_key, base_url=base_url, timeout=timeout) self.httpx_client = HttpClient( @@ -43,7 +48,12 @@ def __init__( class AsyncClientWrapper(BaseClientWrapper): def __init__( - self, *, api_key: str, base_url: str, timeout: typing.Optional[float] = None, httpx_client: httpx.AsyncClient + self, + *, + api_key: str, + base_url: str, + timeout: typing.Optional[float] = None, + httpx_client: httpx.AsyncClient, ): super().__init__(api_key=api_key, base_url=base_url, timeout=timeout) self.httpx_client = AsyncHttpClient( diff --git a/src/schematic/core/file.py b/src/schematic/core/file.py index 44b0d27..c6d11fc 100644 --- a/src/schematic/core/file.py +++ b/src/schematic/core/file.py @@ -58,7 +58,8 @@ def with_content_type(*, file: File, default_content_type: str) -> File: return (filename, content, out_content_type) elif len(file) == 4: filename, content, file_content_type, headers = cast( # type: ignore - Tuple[Optional[str], FileContent, Optional[str], Mapping[str, str]], file + Tuple[Optional[str], FileContent, Optional[str], Mapping[str, str]], + file, ) out_content_type = file_content_type or default_content_type return (filename, content, out_content_type, headers) diff --git a/src/schematic/core/pydantic_utilities.py b/src/schematic/core/pydantic_utilities.py index ca1f479..93a9d78 100644 --- a/src/schematic/core/pydantic_utilities.py +++ b/src/schematic/core/pydantic_utilities.py @@ -97,14 +97,18 @@ class Config: @classmethod def model_construct( - cls: typing.Type["Model"], _fields_set: typing.Optional[typing.Set[str]] = None, **values: typing.Any + cls: typing.Type["Model"], + _fields_set: typing.Optional[typing.Set[str]] = None, + **values: typing.Any, ) -> "Model": dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read") return cls.construct(_fields_set, **dealiased_object) @classmethod def construct( - cls: typing.Type["Model"], _fields_set: typing.Optional[typing.Set[str]] = None, **values: typing.Any + cls: typing.Type["Model"], + _fields_set: typing.Optional[typing.Set[str]] = None, + **values: typing.Any, ) -> "Model": dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read") if IS_PYDANTIC_V2: diff --git a/src/schematic/crm/client.py b/src/schematic/crm/client.py index 267e848..2884e1f 100644 --- a/src/schematic/crm/client.py +++ b/src/schematic/crm/client.py @@ -3,7 +3,9 @@ import typing from ..core.client_wrapper import SyncClientWrapper from ..core.request_options import RequestOptions -from .types.upsert_deal_line_item_association_response import UpsertDealLineItemAssociationResponse +from .types.upsert_deal_line_item_association_response import ( + UpsertDealLineItemAssociationResponse, +) from ..core.pydantic_utilities import parse_obj_as from ..errors.bad_request_error import BadRequestError from ..types.api_error import ApiError as types_api_error_ApiError diff --git a/src/schematic/entitlements/client.py b/src/schematic/entitlements/client.py index 3cc013d..c53a889 100644 --- a/src/schematic/entitlements/client.py +++ b/src/schematic/entitlements/client.py @@ -12,9 +12,13 @@ from ..errors.internal_server_error import InternalServerError from json.decoder import JSONDecodeError from ..core.api_error import ApiError as core_api_error_ApiError -from .types.create_company_override_request_body_value_type import CreateCompanyOverrideRequestBodyValueType +from .types.create_company_override_request_body_value_type import ( + CreateCompanyOverrideRequestBodyValueType, +) import datetime as dt -from .types.create_company_override_request_body_metric_period import CreateCompanyOverrideRequestBodyMetricPeriod +from .types.create_company_override_request_body_metric_period import ( + CreateCompanyOverrideRequestBodyMetricPeriod, +) from .types.create_company_override_request_body_metric_period_month_reset import ( CreateCompanyOverrideRequestBodyMetricPeriodMonthReset, ) @@ -22,8 +26,12 @@ from .types.get_company_override_response import GetCompanyOverrideResponse from ..core.jsonable_encoder import jsonable_encoder from ..errors.not_found_error import NotFoundError -from .types.update_company_override_request_body_value_type import UpdateCompanyOverrideRequestBodyValueType -from .types.update_company_override_request_body_metric_period import UpdateCompanyOverrideRequestBodyMetricPeriod +from .types.update_company_override_request_body_value_type import ( + UpdateCompanyOverrideRequestBodyValueType, +) +from .types.update_company_override_request_body_metric_period import ( + UpdateCompanyOverrideRequestBodyMetricPeriod, +) from .types.update_company_override_request_body_metric_period_month_reset import ( UpdateCompanyOverrideRequestBodyMetricPeriodMonthReset, ) @@ -37,22 +45,32 @@ from .types.list_feature_users_response import ListFeatureUsersResponse from .types.count_feature_users_response import CountFeatureUsersResponse from .types.list_plan_entitlements_response import ListPlanEntitlementsResponse -from .types.create_plan_entitlement_request_body_value_type import CreatePlanEntitlementRequestBodyValueType -from .types.create_plan_entitlement_request_body_metric_period import CreatePlanEntitlementRequestBodyMetricPeriod +from .types.create_plan_entitlement_request_body_value_type import ( + CreatePlanEntitlementRequestBodyValueType, +) +from .types.create_plan_entitlement_request_body_metric_period import ( + CreatePlanEntitlementRequestBodyMetricPeriod, +) from .types.create_plan_entitlement_request_body_metric_period_month_reset import ( CreatePlanEntitlementRequestBodyMetricPeriodMonthReset, ) from .types.create_plan_entitlement_response import CreatePlanEntitlementResponse from .types.get_plan_entitlement_response import GetPlanEntitlementResponse -from .types.update_plan_entitlement_request_body_value_type import UpdatePlanEntitlementRequestBodyValueType -from .types.update_plan_entitlement_request_body_metric_period import UpdatePlanEntitlementRequestBodyMetricPeriod +from .types.update_plan_entitlement_request_body_value_type import ( + UpdatePlanEntitlementRequestBodyValueType, +) +from .types.update_plan_entitlement_request_body_metric_period import ( + UpdatePlanEntitlementRequestBodyMetricPeriod, +) from .types.update_plan_entitlement_request_body_metric_period_month_reset import ( UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset, ) from .types.update_plan_entitlement_response import UpdatePlanEntitlementResponse from .types.delete_plan_entitlement_response import DeletePlanEntitlementResponse from .types.count_plan_entitlements_response import CountPlanEntitlementsResponse -from .types.get_feature_usage_by_company_response import GetFeatureUsageByCompanyResponse +from .types.get_feature_usage_by_company_response import ( + GetFeatureUsageByCompanyResponse, +) from ..core.client_wrapper import AsyncClientWrapper # this is used as the default value for optional parameters @@ -325,7 +343,10 @@ def create_company_override( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_company_override( - self, company_override_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_override_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetCompanyOverrideResponse: """ Parameters @@ -547,7 +568,10 @@ def update_company_override( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_company_override( - self, company_override_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_override_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteCompanyOverrideResponse: """ Parameters @@ -1561,6 +1585,7 @@ def create_plan_entitlement( metric_period_month_reset: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, price_behavior: typing.Optional[str] = OMIT, + soft_limit: typing.Optional[int] = OMIT, value_bool: typing.Optional[bool] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, @@ -1584,6 +1609,8 @@ def create_plan_entitlement( price_behavior : typing.Optional[str] + soft_limit : typing.Optional[int] + value_bool : typing.Optional[bool] value_numeric : typing.Optional[int] @@ -1623,6 +1650,7 @@ def create_plan_entitlement( "monthly_metered_price_id": monthly_metered_price_id, "plan_id": plan_id, "price_behavior": price_behavior, + "soft_limit": soft_limit, "value_bool": value_bool, "value_numeric": value_numeric, "value_trait_id": value_trait_id, @@ -1690,7 +1718,10 @@ def create_plan_entitlement( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_plan_entitlement( - self, plan_entitlement_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + plan_entitlement_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetPlanEntitlementResponse: """ Parameters @@ -1785,6 +1816,7 @@ def update_plan_entitlement( metric_period_month_reset: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, price_behavior: typing.Optional[str] = OMIT, + soft_limit: typing.Optional[int] = OMIT, value_bool: typing.Optional[bool] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, @@ -1807,6 +1839,8 @@ def update_plan_entitlement( price_behavior : typing.Optional[str] + soft_limit : typing.Optional[int] + value_bool : typing.Optional[bool] value_numeric : typing.Optional[int] @@ -1843,6 +1877,7 @@ def update_plan_entitlement( "metric_period_month_reset": metric_period_month_reset, "monthly_metered_price_id": monthly_metered_price_id, "price_behavior": price_behavior, + "soft_limit": soft_limit, "value_bool": value_bool, "value_numeric": value_numeric, "value_trait_id": value_trait_id, @@ -1920,7 +1955,10 @@ def update_plan_entitlement( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_plan_entitlement( - self, plan_entitlement_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + plan_entitlement_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeletePlanEntitlementResponse: """ Parameters @@ -2513,7 +2551,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_company_override( - self, company_override_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_override_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetCompanyOverrideResponse: """ Parameters @@ -2751,7 +2792,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_company_override( - self, company_override_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + company_override_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteCompanyOverrideResponse: """ Parameters @@ -3837,6 +3881,7 @@ async def create_plan_entitlement( metric_period_month_reset: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, price_behavior: typing.Optional[str] = OMIT, + soft_limit: typing.Optional[int] = OMIT, value_bool: typing.Optional[bool] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, @@ -3860,6 +3905,8 @@ async def create_plan_entitlement( price_behavior : typing.Optional[str] + soft_limit : typing.Optional[int] + value_bool : typing.Optional[bool] value_numeric : typing.Optional[int] @@ -3907,6 +3954,7 @@ async def main() -> None: "monthly_metered_price_id": monthly_metered_price_id, "plan_id": plan_id, "price_behavior": price_behavior, + "soft_limit": soft_limit, "value_bool": value_bool, "value_numeric": value_numeric, "value_trait_id": value_trait_id, @@ -3974,7 +4022,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_plan_entitlement( - self, plan_entitlement_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + plan_entitlement_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetPlanEntitlementResponse: """ Parameters @@ -4077,6 +4128,7 @@ async def update_plan_entitlement( metric_period_month_reset: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, price_behavior: typing.Optional[str] = OMIT, + soft_limit: typing.Optional[int] = OMIT, value_bool: typing.Optional[bool] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, @@ -4099,6 +4151,8 @@ async def update_plan_entitlement( price_behavior : typing.Optional[str] + soft_limit : typing.Optional[int] + value_bool : typing.Optional[bool] value_numeric : typing.Optional[int] @@ -4143,6 +4197,7 @@ async def main() -> None: "metric_period_month_reset": metric_period_month_reset, "monthly_metered_price_id": monthly_metered_price_id, "price_behavior": price_behavior, + "soft_limit": soft_limit, "value_bool": value_bool, "value_numeric": value_numeric, "value_trait_id": value_trait_id, @@ -4220,7 +4275,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_plan_entitlement( - self, plan_entitlement_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + plan_entitlement_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeletePlanEntitlementResponse: """ Parameters diff --git a/src/schematic/entitlements/types/create_company_override_request_body_metric_period.py b/src/schematic/entitlements/types/create_company_override_request_body_metric_period.py index beda67a..c0b05dc 100644 --- a/src/schematic/entitlements/types/create_company_override_request_body_metric_period.py +++ b/src/schematic/entitlements/types/create_company_override_request_body_metric_period.py @@ -3,5 +3,6 @@ import typing CreateCompanyOverrideRequestBodyMetricPeriod = typing.Union[ - typing.Literal["all_time", "current_month", "current_week", "current_day"], typing.Any + typing.Literal["all_time", "current_month", "current_week", "current_day"], + typing.Any, ] diff --git a/src/schematic/entitlements/types/create_plan_entitlement_request_body_metric_period.py b/src/schematic/entitlements/types/create_plan_entitlement_request_body_metric_period.py index 0bcfcd1..97817df 100644 --- a/src/schematic/entitlements/types/create_plan_entitlement_request_body_metric_period.py +++ b/src/schematic/entitlements/types/create_plan_entitlement_request_body_metric_period.py @@ -3,5 +3,6 @@ import typing CreatePlanEntitlementRequestBodyMetricPeriod = typing.Union[ - typing.Literal["all_time", "current_month", "current_week", "current_day"], typing.Any + typing.Literal["all_time", "current_month", "current_week", "current_day"], + typing.Any, ] diff --git a/src/schematic/entitlements/types/update_company_override_request_body_metric_period.py b/src/schematic/entitlements/types/update_company_override_request_body_metric_period.py index d92b779..fca390a 100644 --- a/src/schematic/entitlements/types/update_company_override_request_body_metric_period.py +++ b/src/schematic/entitlements/types/update_company_override_request_body_metric_period.py @@ -3,5 +3,6 @@ import typing UpdateCompanyOverrideRequestBodyMetricPeriod = typing.Union[ - typing.Literal["all_time", "current_month", "current_week", "current_day"], typing.Any + typing.Literal["all_time", "current_month", "current_week", "current_day"], + typing.Any, ] diff --git a/src/schematic/entitlements/types/update_plan_entitlement_request_body_metric_period.py b/src/schematic/entitlements/types/update_plan_entitlement_request_body_metric_period.py index 53cd841..8604439 100644 --- a/src/schematic/entitlements/types/update_plan_entitlement_request_body_metric_period.py +++ b/src/schematic/entitlements/types/update_plan_entitlement_request_body_metric_period.py @@ -3,5 +3,6 @@ import typing UpdatePlanEntitlementRequestBodyMetricPeriod = typing.Union[ - typing.Literal["all_time", "current_month", "current_week", "current_day"], typing.Any + typing.Literal["all_time", "current_month", "current_week", "current_day"], + typing.Any, ] diff --git a/src/schematic/events/client.py b/src/schematic/events/client.py index 4f3adb4..622a428 100644 --- a/src/schematic/events/client.py +++ b/src/schematic/events/client.py @@ -23,7 +23,9 @@ from .types.get_event_response import GetEventResponse from ..core.jsonable_encoder import jsonable_encoder from ..errors.not_found_error import NotFoundError -from .types.get_segment_integration_status_response import GetSegmentIntegrationStatusResponse +from .types.get_segment_integration_status_response import ( + GetSegmentIntegrationStatusResponse, +) from ..core.client_wrapper import AsyncClientWrapper # this is used as the default value for optional parameters @@ -73,7 +75,9 @@ def create_event_batch( method="POST", json={ "events": convert_and_respect_annotation_metadata( - object_=events, annotation=typing.Sequence[CreateEventRequestBody], direction="write" + object_=events, + annotation=typing.Sequence[CreateEventRequestBody], + direction="write", ), }, headers={ @@ -678,7 +682,9 @@ async def main() -> None: method="POST", json={ "events": convert_and_respect_annotation_metadata( - object_=events, annotation=typing.Sequence[CreateEventRequestBody], direction="write" + object_=events, + annotation=typing.Sequence[CreateEventRequestBody], + direction="write", ), }, headers={ diff --git a/src/schematic/features/client.py b/src/schematic/features/client.py index f65b4fe..a26931d 100644 --- a/src/schematic/features/client.py +++ b/src/schematic/features/client.py @@ -2,8 +2,12 @@ import typing from ..core.client_wrapper import SyncClientWrapper -from ..types.create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody -from ..types.create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody +from ..types.create_or_update_condition_group_request_body import ( + CreateOrUpdateConditionGroupRequestBody, +) +from ..types.create_or_update_condition_request_body import ( + CreateOrUpdateConditionRequestBody, +) from ..core.request_options import RequestOptions from .types.count_audience_companies_response import CountAudienceCompaniesResponse from ..core.serialization import convert_and_respect_annotation_metadata @@ -19,13 +23,17 @@ from .types.list_audience_companies_response import ListAudienceCompaniesResponse from .types.list_audience_users_response import ListAudienceUsersResponse from .types.list_features_response import ListFeaturesResponse -from .types.create_feature_request_body_feature_type import CreateFeatureRequestBodyFeatureType +from .types.create_feature_request_body_feature_type import ( + CreateFeatureRequestBodyFeatureType, +) from ..types.create_or_update_flag_request_body import CreateOrUpdateFlagRequestBody from .types.create_feature_response import CreateFeatureResponse from .types.get_feature_response import GetFeatureResponse from ..core.jsonable_encoder import jsonable_encoder from ..errors.not_found_error import NotFoundError -from .types.update_feature_request_body_feature_type import UpdateFeatureRequestBodyFeatureType +from .types.update_feature_request_body_feature_type import ( + UpdateFeatureRequestBodyFeatureType, +) from .types.update_feature_response import UpdateFeatureResponse from .types.delete_feature_response import DeleteFeatureResponse from .types.count_features_response import CountFeaturesResponse @@ -734,6 +742,8 @@ def create_feature( icon: typing.Optional[str] = OMIT, lifecycle_phase: typing.Optional[str] = OMIT, maintainer_id: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> CreateFeatureResponse: @@ -756,6 +766,10 @@ def create_feature( maintainer_id : typing.Optional[str] + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + trait_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] @@ -787,12 +801,16 @@ def create_feature( "event_subtype": event_subtype, "feature_type": feature_type, "flag": convert_and_respect_annotation_metadata( - object_=flag, annotation=CreateOrUpdateFlagRequestBody, direction="write" + object_=flag, + annotation=CreateOrUpdateFlagRequestBody, + direction="write", ), "icon": icon, "lifecycle_phase": lifecycle_phase, "maintainer_id": maintainer_id, "name": name, + "plural_name": plural_name, + "singular_name": singular_name, "trait_id": trait_id, }, headers={ @@ -856,7 +874,10 @@ def create_feature( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_feature( - self, feature_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + feature_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetFeatureResponse: """ Parameters @@ -954,6 +975,8 @@ def update_feature( lifecycle_phase: typing.Optional[str] = OMIT, maintainer_id: typing.Optional[str] = OMIT, name: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpdateFeatureResponse: @@ -979,6 +1002,10 @@ def update_feature( name : typing.Optional[str] + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + trait_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] @@ -1008,12 +1035,16 @@ def update_feature( "event_subtype": event_subtype, "feature_type": feature_type, "flag": convert_and_respect_annotation_metadata( - object_=flag, annotation=CreateOrUpdateFlagRequestBody, direction="write" + object_=flag, + annotation=CreateOrUpdateFlagRequestBody, + direction="write", ), "icon": icon, "lifecycle_phase": lifecycle_phase, "maintainer_id": maintainer_id, "name": name, + "plural_name": plural_name, + "singular_name": singular_name, "trait_id": trait_id, }, headers={ @@ -1087,7 +1118,10 @@ def update_feature( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_feature( - self, feature_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + feature_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteFeatureResponse: """ Parameters @@ -1893,7 +1927,9 @@ def update_flag_rules( method="PUT", json={ "rules": convert_and_respect_annotation_metadata( - object_=rules, annotation=typing.Sequence[CreateOrUpdateRuleRequestBody], direction="write" + object_=rules, + annotation=typing.Sequence[CreateOrUpdateRuleRequestBody], + direction="write", ), }, headers={ @@ -3000,6 +3036,8 @@ async def create_feature( icon: typing.Optional[str] = OMIT, lifecycle_phase: typing.Optional[str] = OMIT, maintainer_id: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> CreateFeatureResponse: @@ -3022,6 +3060,10 @@ async def create_feature( maintainer_id : typing.Optional[str] + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + trait_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] @@ -3061,12 +3103,16 @@ async def main() -> None: "event_subtype": event_subtype, "feature_type": feature_type, "flag": convert_and_respect_annotation_metadata( - object_=flag, annotation=CreateOrUpdateFlagRequestBody, direction="write" + object_=flag, + annotation=CreateOrUpdateFlagRequestBody, + direction="write", ), "icon": icon, "lifecycle_phase": lifecycle_phase, "maintainer_id": maintainer_id, "name": name, + "plural_name": plural_name, + "singular_name": singular_name, "trait_id": trait_id, }, headers={ @@ -3130,7 +3176,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_feature( - self, feature_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + feature_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetFeatureResponse: """ Parameters @@ -3236,6 +3285,8 @@ async def update_feature( lifecycle_phase: typing.Optional[str] = OMIT, maintainer_id: typing.Optional[str] = OMIT, name: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpdateFeatureResponse: @@ -3261,6 +3312,10 @@ async def update_feature( name : typing.Optional[str] + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + trait_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] @@ -3298,12 +3353,16 @@ async def main() -> None: "event_subtype": event_subtype, "feature_type": feature_type, "flag": convert_and_respect_annotation_metadata( - object_=flag, annotation=CreateOrUpdateFlagRequestBody, direction="write" + object_=flag, + annotation=CreateOrUpdateFlagRequestBody, + direction="write", ), "icon": icon, "lifecycle_phase": lifecycle_phase, "maintainer_id": maintainer_id, "name": name, + "plural_name": plural_name, + "singular_name": singular_name, "trait_id": trait_id, }, headers={ @@ -3377,7 +3436,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_feature( - self, feature_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + feature_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteFeatureResponse: """ Parameters @@ -4249,7 +4311,9 @@ async def main() -> None: method="PUT", json={ "rules": convert_and_respect_annotation_metadata( - object_=rules, annotation=typing.Sequence[CreateOrUpdateRuleRequestBody], direction="write" + object_=rules, + annotation=typing.Sequence[CreateOrUpdateRuleRequestBody], + direction="write", ), }, headers={ diff --git a/src/schematic/plangroups/client.py b/src/schematic/plangroups/client.py index 1ee1d3b..d49296a 100644 --- a/src/schematic/plangroups/client.py +++ b/src/schematic/plangroups/client.py @@ -12,6 +12,7 @@ from ..errors.internal_server_error import InternalServerError from json.decoder import JSONDecodeError from ..core.api_error import ApiError as core_api_error_ApiError +from ..types.ordered_plans_in_group import OrderedPlansInGroup from ..types.custom_plan_config import CustomPlanConfig from .types.create_plan_group_response import CreatePlanGroupResponse from ..core.serialization import convert_and_respect_annotation_metadata @@ -112,7 +113,7 @@ def create_plan_group( self, *, add_on_ids: typing.Sequence[str], - plan_ids: typing.Sequence[str], + ordered_plans: typing.Sequence[OrderedPlansInGroup], custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -125,7 +126,7 @@ def create_plan_group( ---------- add_on_ids : typing.Sequence[str] - plan_ids : typing.Sequence[str] + ordered_plans : typing.Sequence[OrderedPlansInGroup] custom_plan_config : typing.Optional[CustomPlanConfig] @@ -147,14 +148,18 @@ def create_plan_group( Examples -------- - from schematic import Schematic + from schematic import OrderedPlansInGroup, Schematic client = Schematic( api_key="YOUR_API_KEY", ) client.plangroups.create_plan_group( add_on_ids=["add_on_ids"], - plan_ids=["plan_ids"], + ordered_plans=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], ) """ _response = self._client_wrapper.httpx_client.request( @@ -163,11 +168,17 @@ def create_plan_group( json={ "add_on_ids": add_on_ids, "custom_plan_config": convert_and_respect_annotation_metadata( - object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" + object_=custom_plan_config, + annotation=CustomPlanConfig, + direction="write", ), "custom_plan_id": custom_plan_id, "default_plan_id": default_plan_id, - "plan_ids": plan_ids, + "ordered_plans": convert_and_respect_annotation_metadata( + object_=ordered_plans, + annotation=typing.Sequence[OrderedPlansInGroup], + direction="write", + ), "trial_days": trial_days, "trial_payment_method_required": trial_payment_method_required, }, @@ -236,7 +247,7 @@ def update_plan_group( plan_group_id: str, *, add_on_ids: typing.Sequence[str], - plan_ids: typing.Sequence[str], + ordered_plans: typing.Sequence[OrderedPlansInGroup], custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -252,7 +263,7 @@ def update_plan_group( add_on_ids : typing.Sequence[str] - plan_ids : typing.Sequence[str] + ordered_plans : typing.Sequence[OrderedPlansInGroup] custom_plan_config : typing.Optional[CustomPlanConfig] @@ -274,7 +285,7 @@ def update_plan_group( Examples -------- - from schematic import Schematic + from schematic import OrderedPlansInGroup, Schematic client = Schematic( api_key="YOUR_API_KEY", @@ -282,7 +293,11 @@ def update_plan_group( client.plangroups.update_plan_group( plan_group_id="plan_group_id", add_on_ids=["add_on_ids"], - plan_ids=["plan_ids"], + ordered_plans=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], ) """ _response = self._client_wrapper.httpx_client.request( @@ -291,11 +306,17 @@ def update_plan_group( json={ "add_on_ids": add_on_ids, "custom_plan_config": convert_and_respect_annotation_metadata( - object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" + object_=custom_plan_config, + annotation=CustomPlanConfig, + direction="write", ), "custom_plan_id": custom_plan_id, "default_plan_id": default_plan_id, - "plan_ids": plan_ids, + "ordered_plans": convert_and_respect_annotation_metadata( + object_=ordered_plans, + annotation=typing.Sequence[OrderedPlansInGroup], + direction="write", + ), "trial_days": trial_days, "trial_payment_method_required": trial_payment_method_required, }, @@ -466,7 +487,7 @@ async def create_plan_group( self, *, add_on_ids: typing.Sequence[str], - plan_ids: typing.Sequence[str], + ordered_plans: typing.Sequence[OrderedPlansInGroup], custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -479,7 +500,7 @@ async def create_plan_group( ---------- add_on_ids : typing.Sequence[str] - plan_ids : typing.Sequence[str] + ordered_plans : typing.Sequence[OrderedPlansInGroup] custom_plan_config : typing.Optional[CustomPlanConfig] @@ -503,7 +524,7 @@ async def create_plan_group( -------- import asyncio - from schematic import AsyncSchematic + from schematic import AsyncSchematic, OrderedPlansInGroup client = AsyncSchematic( api_key="YOUR_API_KEY", @@ -513,7 +534,11 @@ async def create_plan_group( async def main() -> None: await client.plangroups.create_plan_group( add_on_ids=["add_on_ids"], - plan_ids=["plan_ids"], + ordered_plans=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], ) @@ -525,11 +550,17 @@ async def main() -> None: json={ "add_on_ids": add_on_ids, "custom_plan_config": convert_and_respect_annotation_metadata( - object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" + object_=custom_plan_config, + annotation=CustomPlanConfig, + direction="write", ), "custom_plan_id": custom_plan_id, "default_plan_id": default_plan_id, - "plan_ids": plan_ids, + "ordered_plans": convert_and_respect_annotation_metadata( + object_=ordered_plans, + annotation=typing.Sequence[OrderedPlansInGroup], + direction="write", + ), "trial_days": trial_days, "trial_payment_method_required": trial_payment_method_required, }, @@ -598,7 +629,7 @@ async def update_plan_group( plan_group_id: str, *, add_on_ids: typing.Sequence[str], - plan_ids: typing.Sequence[str], + ordered_plans: typing.Sequence[OrderedPlansInGroup], custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -614,7 +645,7 @@ async def update_plan_group( add_on_ids : typing.Sequence[str] - plan_ids : typing.Sequence[str] + ordered_plans : typing.Sequence[OrderedPlansInGroup] custom_plan_config : typing.Optional[CustomPlanConfig] @@ -638,7 +669,7 @@ async def update_plan_group( -------- import asyncio - from schematic import AsyncSchematic + from schematic import AsyncSchematic, OrderedPlansInGroup client = AsyncSchematic( api_key="YOUR_API_KEY", @@ -649,7 +680,11 @@ async def main() -> None: await client.plangroups.update_plan_group( plan_group_id="plan_group_id", add_on_ids=["add_on_ids"], - plan_ids=["plan_ids"], + ordered_plans=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], ) @@ -661,11 +696,17 @@ async def main() -> None: json={ "add_on_ids": add_on_ids, "custom_plan_config": convert_and_respect_annotation_metadata( - object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" + object_=custom_plan_config, + annotation=CustomPlanConfig, + direction="write", ), "custom_plan_id": custom_plan_id, "default_plan_id": default_plan_id, - "plan_ids": plan_ids, + "ordered_plans": convert_and_respect_annotation_metadata( + object_=ordered_plans, + annotation=typing.Sequence[OrderedPlansInGroup], + direction="write", + ), "trial_days": trial_days, "trial_payment_method_required": trial_payment_method_required, }, diff --git a/src/schematic/plans/client.py b/src/schematic/plans/client.py index 3861550..3554859 100644 --- a/src/schematic/plans/client.py +++ b/src/schematic/plans/client.py @@ -15,8 +15,12 @@ from json.decoder import JSONDecodeError from ..core.api_error import ApiError as core_api_error_ApiError from .types.get_audience_response import GetAudienceResponse -from ..types.create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody -from ..types.create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody +from ..types.create_or_update_condition_group_request_body import ( + CreateOrUpdateConditionGroupRequestBody, +) +from ..types.create_or_update_condition_request_body import ( + CreateOrUpdateConditionRequestBody, +) from .types.update_audience_response import UpdateAudienceResponse from ..core.serialization import convert_and_respect_annotation_metadata from .types.delete_audience_response import DeleteAudienceResponse @@ -156,7 +160,10 @@ def update_company_plans( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + plan_audience_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetAudienceResponse: """ Parameters @@ -387,7 +394,10 @@ def update_audience( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + plan_audience_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteAudienceResponse: """ Parameters @@ -1401,7 +1411,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + plan_audience_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetAudienceResponse: """ Parameters @@ -1648,7 +1661,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + plan_audience_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteAudienceResponse: """ Parameters diff --git a/src/schematic/types/__init__.py b/src/schematic/types/__init__.py index 47b5c17..4b8c7c3 100644 --- a/src/schematic/types/__init__.py +++ b/src/schematic/types/__init__.py @@ -18,6 +18,7 @@ from .billing_product_plan_response_data import BillingProductPlanResponseData from .billing_product_price_response_data import BillingProductPriceResponseData from .billing_product_pricing import BillingProductPricing +from .billing_product_pricing_usage_type import BillingProductPricingUsageType from .billing_product_response_data import BillingProductResponseData from .billing_subscription_discount import BillingSubscriptionDiscount from .billing_subscription_discount_view import BillingSubscriptionDiscountView @@ -45,6 +46,7 @@ from .component_response_data import ComponentResponseData from .count_response import CountResponse from .coupon_request_body import CouponRequestBody +from .create_billing_price_tier_request_body import CreateBillingPriceTierRequestBody from .create_entitlement_req_common import CreateEntitlementReqCommon from .create_entitlement_req_common_metric_period import CreateEntitlementReqCommonMetricPeriod from .create_entitlement_req_common_metric_period_month_reset import CreateEntitlementReqCommonMetricPeriodMonthReset @@ -71,6 +73,7 @@ from .custom_plan_view_config_response_data import CustomPlanViewConfigResponseData from .decimal import Decimal from .delete_response import DeleteResponse +from .entitlements_in_plan import EntitlementsInPlan from .entity_key_definition_response_data import EntityKeyDefinitionResponseData from .entity_key_detail_response_data import EntityKeyDetailResponseData from .entity_key_response_data import EntityKeyResponseData @@ -105,6 +108,7 @@ from .issue_temporary_access_token_response_data import IssueTemporaryAccessTokenResponseData from .keys_request_body import KeysRequestBody from .meter_request_body import MeterRequestBody +from .ordered_plans_in_group import OrderedPlansInGroup from .pagination_filter import PaginationFilter from .payment_method_request_body import PaymentMethodRequestBody from .payment_method_response_data import PaymentMethodResponseData @@ -112,8 +116,10 @@ from .plan_audience_response_data import PlanAudienceResponseData from .plan_detail_response_data import PlanDetailResponseData from .plan_entitlement_response_data import PlanEntitlementResponseData +from .plan_entitlements_order import PlanEntitlementsOrder from .plan_group_detail_response_data import PlanGroupDetailResponseData from .plan_group_plan_detail_response_data import PlanGroupPlanDetailResponseData +from .plan_group_plan_entitlements_order import PlanGroupPlanEntitlementsOrder from .plan_group_response_data import PlanGroupResponseData from .plan_response_data import PlanResponseData from .preview_object import PreviewObject @@ -169,6 +175,7 @@ "BillingProductPlanResponseData", "BillingProductPriceResponseData", "BillingProductPricing", + "BillingProductPricingUsageType", "BillingProductResponseData", "BillingSubscriptionDiscount", "BillingSubscriptionDiscountView", @@ -196,6 +203,7 @@ "ComponentResponseData", "CountResponse", "CouponRequestBody", + "CreateBillingPriceTierRequestBody", "CreateEntitlementReqCommon", "CreateEntitlementReqCommonMetricPeriod", "CreateEntitlementReqCommonMetricPeriodMonthReset", @@ -220,6 +228,7 @@ "CustomPlanViewConfigResponseData", "Decimal", "DeleteResponse", + "EntitlementsInPlan", "EntityKeyDefinitionResponseData", "EntityKeyDetailResponseData", "EntityKeyResponseData", @@ -254,6 +263,7 @@ "IssueTemporaryAccessTokenResponseData", "KeysRequestBody", "MeterRequestBody", + "OrderedPlansInGroup", "PaginationFilter", "PaymentMethodRequestBody", "PaymentMethodResponseData", @@ -261,8 +271,10 @@ "PlanAudienceResponseData", "PlanDetailResponseData", "PlanEntitlementResponseData", + "PlanEntitlementsOrder", "PlanGroupDetailResponseData", "PlanGroupPlanDetailResponseData", + "PlanGroupPlanEntitlementsOrder", "PlanGroupResponseData", "PlanResponseData", "PreviewObject", diff --git a/src/schematic/types/audience_request_body.py b/src/schematic/types/audience_request_body.py index 05f3c37..99e3ab6 100644 --- a/src/schematic/types/audience_request_body.py +++ b/src/schematic/types/audience_request_body.py @@ -2,7 +2,9 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing -from .create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody +from .create_or_update_condition_group_request_body import ( + CreateOrUpdateConditionGroupRequestBody, +) from .create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/types/billing_product_detail_response_data.py b/src/schematic/types/billing_product_detail_response_data.py index 0cbfad1..91068cb 100644 --- a/src/schematic/types/billing_product_detail_response_data.py +++ b/src/schematic/types/billing_product_detail_response_data.py @@ -19,6 +19,7 @@ class BillingProductDetailResponseData(UniversalBaseModel): prices: typing.List[BillingPriceResponseData] product_id: str quantity: float + subscription_count: int updated_at: dt.datetime if IS_PYDANTIC_V2: diff --git a/src/schematic/types/billing_product_pricing.py b/src/schematic/types/billing_product_pricing.py index 17810f9..6106864 100644 --- a/src/schematic/types/billing_product_pricing.py +++ b/src/schematic/types/billing_product_pricing.py @@ -2,6 +2,7 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing +from .billing_product_pricing_usage_type import BillingProductPricingUsageType from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic @@ -14,7 +15,7 @@ class BillingProductPricing(UniversalBaseModel): price_external_id: str product_external_id: str quantity: int - usage_type: str + usage_type: BillingProductPricingUsageType if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/schematic/types/billing_product_pricing_usage_type.py b/src/schematic/types/billing_product_pricing_usage_type.py new file mode 100644 index 0000000..b8ddd6b --- /dev/null +++ b/src/schematic/types/billing_product_pricing_usage_type.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +BillingProductPricingUsageType = typing.Union[typing.Literal["licensed", "metered"], typing.Any] diff --git a/src/schematic/types/billing_subscription_response_data.py b/src/schematic/types/billing_subscription_response_data.py index 1959417..8b2551f 100644 --- a/src/schematic/types/billing_subscription_response_data.py +++ b/src/schematic/types/billing_subscription_response_data.py @@ -8,10 +8,13 @@ class BillingSubscriptionResponseData(UniversalBaseModel): + cancel_at: typing.Optional[int] = None + cancel_at_period_end: bool company_id: typing.Optional[str] = None created_at: dt.datetime currency: str customer_external_id: str + default_payment_method_id: typing.Optional[str] = None expired_at: typing.Optional[dt.datetime] = None id: str interval: str diff --git a/src/schematic/types/billing_subscription_view.py b/src/schematic/types/billing_subscription_view.py index 8ecbf73..8817f4b 100644 --- a/src/schematic/types/billing_subscription_view.py +++ b/src/schematic/types/billing_subscription_view.py @@ -6,7 +6,9 @@ from .billing_subscription_discount_view import BillingSubscriptionDiscountView from .invoice_response_data import InvoiceResponseData from .payment_method_response_data import PaymentMethodResponseData -from .billing_product_for_subscription_response_data import BillingProductForSubscriptionResponseData +from .billing_product_for_subscription_response_data import ( + BillingProductForSubscriptionResponseData, +) from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic @@ -16,10 +18,13 @@ class BillingSubscriptionView(UniversalBaseModel): The updated resource """ + cancel_at: typing.Optional[int] = None + cancel_at_period_end: bool company_id: typing.Optional[str] = None created_at: dt.datetime currency: str customer_external_id: str + default_payment_method_id: typing.Optional[str] = None discounts: typing.List[BillingSubscriptionDiscountView] expired_at: typing.Optional[dt.datetime] = None id: str diff --git a/src/schematic/types/company_detail_response_data.py b/src/schematic/types/company_detail_response_data.py index f4abdca..2dc3694 100644 --- a/src/schematic/types/company_detail_response_data.py +++ b/src/schematic/types/company_detail_response_data.py @@ -7,7 +7,10 @@ import datetime as dt from .entity_trait_detail_response_data import EntityTraitDetailResponseData from .entity_key_detail_response_data import EntityKeyDetailResponseData -from .company_event_period_metrics_response_data import CompanyEventPeriodMetricsResponseData +from .company_event_period_metrics_response_data import ( + CompanyEventPeriodMetricsResponseData, +) +from .payment_method_response_data import PaymentMethodResponseData from .generic_preview_object import GenericPreviewObject import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -26,6 +29,7 @@ class CompanyDetailResponseData(UniversalBaseModel): logo_url: typing.Optional[str] = None metrics: typing.List[CompanyEventPeriodMetricsResponseData] name: str + payment_methods: typing.List[PaymentMethodResponseData] plan: typing.Optional[CompanyPlanWithBillingSubView] = None plans: typing.List[GenericPreviewObject] traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) diff --git a/src/schematic/types/company_subscription_response_data.py b/src/schematic/types/company_subscription_response_data.py index 3892aa1..39d9bc0 100644 --- a/src/schematic/types/company_subscription_response_data.py +++ b/src/schematic/types/company_subscription_response_data.py @@ -2,16 +2,20 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing -from .billing_subscription_discount_view import BillingSubscriptionDiscountView import datetime as dt +from .billing_subscription_discount_view import BillingSubscriptionDiscountView from .invoice_response_data import InvoiceResponseData from .payment_method_response_data import PaymentMethodResponseData -from .billing_product_for_subscription_response_data import BillingProductForSubscriptionResponseData +from .billing_product_for_subscription_response_data import ( + BillingProductForSubscriptionResponseData, +) from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic class CompanySubscriptionResponseData(UniversalBaseModel): + cancel_at: typing.Optional[dt.datetime] = None + cancel_at_period_end: bool currency: str customer_external_id: str discounts: typing.List[BillingSubscriptionDiscountView] diff --git a/src/schematic/types/component_capabilities.py b/src/schematic/types/component_capabilities.py index a3011e1..a830c7e 100644 --- a/src/schematic/types/component_capabilities.py +++ b/src/schematic/types/component_capabilities.py @@ -7,6 +7,7 @@ class ComponentCapabilities(UniversalBaseModel): + badge_visibility: bool checkout: bool if IS_PYDANTIC_V2: diff --git a/src/schematic/types/create_billing_price_tier_request_body.py b/src/schematic/types/create_billing_price_tier_request_body.py new file mode 100644 index 0000000..484c732 --- /dev/null +++ b/src/schematic/types/create_billing_price_tier_request_body.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.pydantic_utilities import UniversalBaseModel +import typing +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class CreateBillingPriceTierRequestBody(UniversalBaseModel): + flat_amount: typing.Optional[int] = None + per_unit_price: typing.Optional[int] = None + price_external_id: str + up_to: typing.Optional[int] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/create_entitlement_req_common.py b/src/schematic/types/create_entitlement_req_common.py index e4699c4..8a7daa3 100644 --- a/src/schematic/types/create_entitlement_req_common.py +++ b/src/schematic/types/create_entitlement_req_common.py @@ -2,9 +2,15 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing -from .create_entitlement_req_common_metric_period import CreateEntitlementReqCommonMetricPeriod -from .create_entitlement_req_common_metric_period_month_reset import CreateEntitlementReqCommonMetricPeriodMonthReset -from .create_entitlement_req_common_value_type import CreateEntitlementReqCommonValueType +from .create_entitlement_req_common_metric_period import ( + CreateEntitlementReqCommonMetricPeriod, +) +from .create_entitlement_req_common_metric_period_month_reset import ( + CreateEntitlementReqCommonMetricPeriodMonthReset, +) +from .create_entitlement_req_common_value_type import ( + CreateEntitlementReqCommonValueType, +) from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic diff --git a/src/schematic/types/create_entitlement_req_common_metric_period.py b/src/schematic/types/create_entitlement_req_common_metric_period.py index 87bd1ac..27bb8c1 100644 --- a/src/schematic/types/create_entitlement_req_common_metric_period.py +++ b/src/schematic/types/create_entitlement_req_common_metric_period.py @@ -3,5 +3,6 @@ import typing CreateEntitlementReqCommonMetricPeriod = typing.Union[ - typing.Literal["all_time", "current_month", "current_week", "current_day"], typing.Any + typing.Literal["all_time", "current_month", "current_week", "current_day"], + typing.Any, ] diff --git a/src/schematic/types/create_or_update_condition_request_body.py b/src/schematic/types/create_or_update_condition_request_body.py index f8c58cf..4f0a477 100644 --- a/src/schematic/types/create_or_update_condition_request_body.py +++ b/src/schematic/types/create_or_update_condition_request_body.py @@ -3,12 +3,18 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing import pydantic -from .create_or_update_condition_request_body_condition_type import CreateOrUpdateConditionRequestBodyConditionType -from .create_or_update_condition_request_body_metric_period import CreateOrUpdateConditionRequestBodyMetricPeriod +from .create_or_update_condition_request_body_condition_type import ( + CreateOrUpdateConditionRequestBodyConditionType, +) +from .create_or_update_condition_request_body_metric_period import ( + CreateOrUpdateConditionRequestBodyMetricPeriod, +) from .create_or_update_condition_request_body_metric_period_month_reset import ( CreateOrUpdateConditionRequestBodyMetricPeriodMonthReset, ) -from .create_or_update_condition_request_body_operator import CreateOrUpdateConditionRequestBodyOperator +from .create_or_update_condition_request_body_operator import ( + CreateOrUpdateConditionRequestBodyOperator, +) from ..core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/types/create_or_update_condition_request_body_condition_type.py b/src/schematic/types/create_or_update_condition_request_body_condition_type.py index eb620d7..50982bf 100644 --- a/src/schematic/types/create_or_update_condition_request_body_condition_type.py +++ b/src/schematic/types/create_or_update_condition_request_body_condition_type.py @@ -3,6 +3,15 @@ import typing CreateOrUpdateConditionRequestBodyConditionType = typing.Union[ - typing.Literal["company", "metric", "trait", "user", "plan", "billing_product", "crm_product", "base_plan"], + typing.Literal[ + "company", + "metric", + "trait", + "user", + "plan", + "billing_product", + "crm_product", + "base_plan", + ], typing.Any, ] diff --git a/src/schematic/types/create_or_update_condition_request_body_metric_period.py b/src/schematic/types/create_or_update_condition_request_body_metric_period.py index 622b8c9..1c02831 100644 --- a/src/schematic/types/create_or_update_condition_request_body_metric_period.py +++ b/src/schematic/types/create_or_update_condition_request_body_metric_period.py @@ -3,5 +3,6 @@ import typing CreateOrUpdateConditionRequestBodyMetricPeriod = typing.Union[ - typing.Literal["all_time", "current_month", "current_week", "current_day"], typing.Any + typing.Literal["all_time", "current_month", "current_week", "current_day"], + typing.Any, ] diff --git a/src/schematic/types/create_or_update_condition_request_body_operator.py b/src/schematic/types/create_or_update_condition_request_body_operator.py index 431b5e4..effb969 100644 --- a/src/schematic/types/create_or_update_condition_request_body_operator.py +++ b/src/schematic/types/create_or_update_condition_request_body_operator.py @@ -3,5 +3,6 @@ import typing CreateOrUpdateConditionRequestBodyOperator = typing.Union[ - typing.Literal["eq", "ne", "gt", "gte", "lt", "lte", "is_empty", "not_empty"], typing.Any + typing.Literal["eq", "ne", "gt", "gte", "lt", "lte", "is_empty", "not_empty"], + typing.Any, ] diff --git a/src/schematic/types/create_or_update_rule_request_body.py b/src/schematic/types/create_or_update_rule_request_body.py index 38d6dd4..b6bafe3 100644 --- a/src/schematic/types/create_or_update_rule_request_body.py +++ b/src/schematic/types/create_or_update_rule_request_body.py @@ -2,9 +2,13 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing -from .create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody +from .create_or_update_condition_group_request_body import ( + CreateOrUpdateConditionGroupRequestBody, +) from .create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody -from .create_or_update_rule_request_body_rule_type import CreateOrUpdateRuleRequestBodyRuleType +from .create_or_update_rule_request_body_rule_type import ( + CreateOrUpdateRuleRequestBodyRuleType, +) from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic diff --git a/src/schematic/types/create_or_update_rule_request_body_rule_type.py b/src/schematic/types/create_or_update_rule_request_body_rule_type.py index 9494daf..dbdb569 100644 --- a/src/schematic/types/create_or_update_rule_request_body_rule_type.py +++ b/src/schematic/types/create_or_update_rule_request_body_rule_type.py @@ -3,6 +3,13 @@ import typing CreateOrUpdateRuleRequestBodyRuleType = typing.Union[ - typing.Literal["global_override", "company_override", "plan_entitlement", "standard", "default", "plan_audience"], + typing.Literal[ + "global_override", + "company_override", + "plan_entitlement", + "standard", + "default", + "plan_audience", + ], typing.Any, ] diff --git a/src/schematic/types/entitlements_in_plan.py b/src/schematic/types/entitlements_in_plan.py new file mode 100644 index 0000000..25ee9a6 --- /dev/null +++ b/src/schematic/types/entitlements_in_plan.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.pydantic_utilities import UniversalBaseModel +import typing +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class EntitlementsInPlan(UniversalBaseModel): + entitlement_id: str + visible: typing.Optional[bool] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/feature_company_response_data.py b/src/schematic/types/feature_company_response_data.py index c052214..5ec2d54 100644 --- a/src/schematic/types/feature_company_response_data.py +++ b/src/schematic/types/feature_company_response_data.py @@ -3,7 +3,9 @@ from ..core.pydantic_utilities import UniversalBaseModel import pydantic import typing -from .feature_company_response_data_allocation_type import FeatureCompanyResponseDataAllocationType +from .feature_company_response_data_allocation_type import ( + FeatureCompanyResponseDataAllocationType, +) from .company_detail_response_data import CompanyDetailResponseData import datetime as dt from .feature_detail_response_data import FeatureDetailResponseData diff --git a/src/schematic/types/feature_company_user_response_data.py b/src/schematic/types/feature_company_user_response_data.py index df34a59..65f5ff6 100644 --- a/src/schematic/types/feature_company_user_response_data.py +++ b/src/schematic/types/feature_company_user_response_data.py @@ -3,7 +3,9 @@ from ..core.pydantic_utilities import UniversalBaseModel import pydantic import typing -from .feature_company_user_response_data_allocation_type import FeatureCompanyUserResponseDataAllocationType +from .feature_company_user_response_data_allocation_type import ( + FeatureCompanyUserResponseDataAllocationType, +) from .company_detail_response_data import CompanyDetailResponseData from .feature_detail_response_data import FeatureDetailResponseData import datetime as dt diff --git a/src/schematic/types/feature_detail_response_data.py b/src/schematic/types/feature_detail_response_data.py index 7ad893a..6c32eb1 100644 --- a/src/schematic/types/feature_detail_response_data.py +++ b/src/schematic/types/feature_detail_response_data.py @@ -24,6 +24,8 @@ class FeatureDetailResponseData(UniversalBaseModel): maintainer_id: typing.Optional[str] = None name: str plans: typing.List[PreviewObject] + plural_name: typing.Optional[str] = None + singular_name: typing.Optional[str] = None trait: typing.Optional[EntityTraitDefinitionResponseData] = None trait_id: typing.Optional[str] = None updated_at: dt.datetime diff --git a/src/schematic/types/feature_response_data.py b/src/schematic/types/feature_response_data.py index 6ddfadc..61060c9 100644 --- a/src/schematic/types/feature_response_data.py +++ b/src/schematic/types/feature_response_data.py @@ -17,6 +17,8 @@ class FeatureResponseData(UniversalBaseModel): lifecycle_phase: typing.Optional[str] = None maintainer_id: typing.Optional[str] = None name: str + plural_name: typing.Optional[str] = None + singular_name: typing.Optional[str] = None trait_id: typing.Optional[str] = None updated_at: dt.datetime diff --git a/src/schematic/types/feature_usage_response_data.py b/src/schematic/types/feature_usage_response_data.py index 59111a5..22bb67e 100644 --- a/src/schematic/types/feature_usage_response_data.py +++ b/src/schematic/types/feature_usage_response_data.py @@ -3,7 +3,9 @@ from ..core.pydantic_utilities import UniversalBaseModel import pydantic import typing -from .feature_usage_response_data_allocation_type import FeatureUsageResponseDataAllocationType +from .feature_usage_response_data_allocation_type import ( + FeatureUsageResponseDataAllocationType, +) import datetime as dt from .feature_detail_response_data import FeatureDetailResponseData from .billing_price_view import BillingPriceView @@ -49,6 +51,11 @@ class FeatureUsageResponseData(UniversalBaseModel): plan: typing.Optional[PlanResponseData] = None price_behavior: typing.Optional[str] = None + soft_limit: typing.Optional[int] = pydantic.Field(default=None) + """ + The soft limit for the feature usage. Available only for overage price behavior + """ + usage: typing.Optional[int] = pydantic.Field(default=None) """ The amount of usage that has been consumed; a null value indicates that usage is not being measured. diff --git a/src/schematic/types/ordered_plans_in_group.py b/src/schematic/types/ordered_plans_in_group.py new file mode 100644 index 0000000..f685244 --- /dev/null +++ b/src/schematic/types/ordered_plans_in_group.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.pydantic_utilities import UniversalBaseModel +import typing +from .entitlements_in_plan import EntitlementsInPlan +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class OrderedPlansInGroup(UniversalBaseModel): + entitlements: typing.Optional[typing.List[EntitlementsInPlan]] = None + plan_id: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/payment_method_request_body.py b/src/schematic/types/payment_method_request_body.py index c31fe22..5e464c9 100644 --- a/src/schematic/types/payment_method_request_body.py +++ b/src/schematic/types/payment_method_request_body.py @@ -20,7 +20,6 @@ class PaymentMethodRequestBody(UniversalBaseModel): card_last_4: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="card_last4")] = None customer_external_id: str payment_method_type: str - subscription_external_id: typing.Optional[str] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/schematic/types/payment_method_response_data.py b/src/schematic/types/payment_method_response_data.py index 32540cf..752ace9 100644 --- a/src/schematic/types/payment_method_response_data.py +++ b/src/schematic/types/payment_method_response_data.py @@ -26,7 +26,6 @@ class PaymentMethodResponseData(UniversalBaseModel): external_id: str id: str payment_method_type: str - subscription_external_id: typing.Optional[str] = None updated_at: dt.datetime if IS_PYDANTIC_V2: diff --git a/src/schematic/types/plan_audience_detail_response_data.py b/src/schematic/types/plan_audience_detail_response_data.py index d5b60f9..2a373c4 100644 --- a/src/schematic/types/plan_audience_detail_response_data.py +++ b/src/schematic/types/plan_audience_detail_response_data.py @@ -2,7 +2,9 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing -from .rule_condition_group_detail_response_data import RuleConditionGroupDetailResponseData +from .rule_condition_group_detail_response_data import ( + RuleConditionGroupDetailResponseData, +) from .rule_condition_detail_response_data import RuleConditionDetailResponseData import datetime as dt from ..core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/types/plan_entitlement_response_data.py b/src/schematic/types/plan_entitlement_response_data.py index ab0833f..5a49ec8 100644 --- a/src/schematic/types/plan_entitlement_response_data.py +++ b/src/schematic/types/plan_entitlement_response_data.py @@ -26,6 +26,7 @@ class PlanEntitlementResponseData(UniversalBaseModel): price_behavior: typing.Optional[str] = None rule_id: str rule_id_usage_exceeded: typing.Optional[str] = None + soft_limit: typing.Optional[int] = None updated_at: dt.datetime value_bool: typing.Optional[bool] = None value_numeric: typing.Optional[int] = None diff --git a/src/schematic/types/plan_entitlements_order.py b/src/schematic/types/plan_entitlements_order.py new file mode 100644 index 0000000..0189e4a --- /dev/null +++ b/src/schematic/types/plan_entitlements_order.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.pydantic_utilities import UniversalBaseModel +import typing +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class PlanEntitlementsOrder(UniversalBaseModel): + plan_entitlement_id: str + visible: typing.Optional[bool] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/plan_group_detail_response_data.py b/src/schematic/types/plan_group_detail_response_data.py index ef7795b..0e44f4d 100644 --- a/src/schematic/types/plan_group_detail_response_data.py +++ b/src/schematic/types/plan_group_detail_response_data.py @@ -4,6 +4,7 @@ import typing from .plan_group_plan_detail_response_data import PlanGroupPlanDetailResponseData from .custom_plan_view_config_response_data import CustomPlanViewConfigResponseData +from .plan_group_plan_entitlements_order import PlanGroupPlanEntitlementsOrder from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic @@ -19,6 +20,7 @@ class PlanGroupDetailResponseData(UniversalBaseModel): default_plan: typing.Optional[PlanGroupPlanDetailResponseData] = None default_plan_id: typing.Optional[str] = None id: str + ordered_plan_list: typing.List[PlanGroupPlanEntitlementsOrder] plans: typing.List[PlanGroupPlanDetailResponseData] trial_days: typing.Optional[int] = None trial_payment_method_required: typing.Optional[bool] = None diff --git a/src/schematic/types/plan_group_plan_entitlements_order.py b/src/schematic/types/plan_group_plan_entitlements_order.py new file mode 100644 index 0000000..84df17c --- /dev/null +++ b/src/schematic/types/plan_group_plan_entitlements_order.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.pydantic_utilities import UniversalBaseModel +import typing +from .plan_entitlements_order import PlanEntitlementsOrder +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class PlanGroupPlanEntitlementsOrder(UniversalBaseModel): + entitlements: typing.Optional[typing.List[PlanEntitlementsOrder]] = None + plan_id: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/plan_group_response_data.py b/src/schematic/types/plan_group_response_data.py index 42f74d7..038464c 100644 --- a/src/schematic/types/plan_group_response_data.py +++ b/src/schematic/types/plan_group_response_data.py @@ -2,6 +2,7 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing +from .ordered_plans_in_group import OrderedPlansInGroup from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic @@ -14,7 +15,7 @@ class PlanGroupResponseData(UniversalBaseModel): add_on_ids: typing.List[str] default_plan_id: typing.Optional[str] = None id: str - plan_ids: typing.List[str] + plan_ids: typing.List[OrderedPlansInGroup] trial_days: typing.Optional[int] = None trial_payment_method_required: typing.Optional[bool] = None diff --git a/src/schematic/types/rule_detail_response_data.py b/src/schematic/types/rule_detail_response_data.py index d69b7f5..26b9af9 100644 --- a/src/schematic/types/rule_detail_response_data.py +++ b/src/schematic/types/rule_detail_response_data.py @@ -2,7 +2,9 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing -from .rule_condition_group_detail_response_data import RuleConditionGroupDetailResponseData +from .rule_condition_group_detail_response_data import ( + RuleConditionGroupDetailResponseData, +) from .rule_condition_detail_response_data import RuleConditionDetailResponseData import datetime as dt from ..core.pydantic_utilities import IS_PYDANTIC_V2 diff --git a/src/schematic/types/update_entitlement_req_common.py b/src/schematic/types/update_entitlement_req_common.py index ffda479..4736dd9 100644 --- a/src/schematic/types/update_entitlement_req_common.py +++ b/src/schematic/types/update_entitlement_req_common.py @@ -2,9 +2,15 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing -from .update_entitlement_req_common_metric_period import UpdateEntitlementReqCommonMetricPeriod -from .update_entitlement_req_common_metric_period_month_reset import UpdateEntitlementReqCommonMetricPeriodMonthReset -from .update_entitlement_req_common_value_type import UpdateEntitlementReqCommonValueType +from .update_entitlement_req_common_metric_period import ( + UpdateEntitlementReqCommonMetricPeriod, +) +from .update_entitlement_req_common_metric_period_month_reset import ( + UpdateEntitlementReqCommonMetricPeriodMonthReset, +) +from .update_entitlement_req_common_value_type import ( + UpdateEntitlementReqCommonValueType, +) from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic diff --git a/src/schematic/types/update_entitlement_req_common_metric_period.py b/src/schematic/types/update_entitlement_req_common_metric_period.py index 077d04f..e71d851 100644 --- a/src/schematic/types/update_entitlement_req_common_metric_period.py +++ b/src/schematic/types/update_entitlement_req_common_metric_period.py @@ -3,5 +3,6 @@ import typing UpdateEntitlementReqCommonMetricPeriod = typing.Union[ - typing.Literal["all_time", "current_month", "current_week", "current_day"], typing.Any + typing.Literal["all_time", "current_month", "current_week", "current_day"], + typing.Any, ] diff --git a/src/schematic/types/update_rule_request_body.py b/src/schematic/types/update_rule_request_body.py index e904fe2..d6a1698 100644 --- a/src/schematic/types/update_rule_request_body.py +++ b/src/schematic/types/update_rule_request_body.py @@ -2,7 +2,9 @@ from ..core.pydantic_utilities import UniversalBaseModel import typing -from .create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody +from .create_or_update_condition_group_request_body import ( + CreateOrUpdateConditionGroupRequestBody, +) from .create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic diff --git a/src/schematic/types/usage_based_entitlement_request_body.py b/src/schematic/types/usage_based_entitlement_request_body.py index cc849e2..2b2b34a 100644 --- a/src/schematic/types/usage_based_entitlement_request_body.py +++ b/src/schematic/types/usage_based_entitlement_request_body.py @@ -9,6 +9,7 @@ class UsageBasedEntitlementRequestBody(UniversalBaseModel): monthly_metered_price_id: typing.Optional[str] = None price_behavior: typing.Optional[str] = None + soft_limit: typing.Optional[int] = None yearly_metered_price_id: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/schematic/types/webhook_response_data.py b/src/schematic/types/webhook_response_data.py index f078340..75667d6 100644 --- a/src/schematic/types/webhook_response_data.py +++ b/src/schematic/types/webhook_response_data.py @@ -12,6 +12,7 @@ class WebhookResponseData(UniversalBaseModel): id: str name: str request_types: typing.List[str] + secret: str status: str updated_at: dt.datetime url: str diff --git a/src/schematic/webhooks/client.py b/src/schematic/webhooks/client.py index fe57151..fd2c83e 100644 --- a/src/schematic/webhooks/client.py +++ b/src/schematic/webhooks/client.py @@ -17,10 +17,14 @@ from ..errors.not_found_error import NotFoundError from .types.count_webhook_events_response import CountWebhookEventsResponse from .types.list_webhooks_response import ListWebhooksResponse -from .types.create_webhook_request_body_request_types_item import CreateWebhookRequestBodyRequestTypesItem +from .types.create_webhook_request_body_request_types_item import ( + CreateWebhookRequestBodyRequestTypesItem, +) from .types.create_webhook_response import CreateWebhookResponse from .types.get_webhook_response import GetWebhookResponse -from .types.update_webhook_request_body_request_types_item import UpdateWebhookRequestBodyRequestTypesItem +from .types.update_webhook_request_body_request_types_item import ( + UpdateWebhookRequestBodyRequestTypesItem, +) from .types.update_webhook_request_body_status import UpdateWebhookRequestBodyStatus from .types.update_webhook_response import UpdateWebhookResponse from .types.delete_webhook_response import DeleteWebhookResponse @@ -144,7 +148,10 @@ def list_webhook_events( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_webhook_event( - self, webhook_event_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + webhook_event_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetWebhookEventResponse: """ Parameters @@ -545,7 +552,10 @@ def create_webhook( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def get_webhook( - self, webhook_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + webhook_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetWebhookResponse: """ Parameters @@ -754,7 +764,10 @@ def update_webhook( raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) def delete_webhook( - self, webhook_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + webhook_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteWebhookResponse: """ Parameters @@ -1062,7 +1075,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_webhook_event( - self, webhook_event_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + webhook_event_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetWebhookEventResponse: """ Parameters @@ -1495,7 +1511,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def get_webhook( - self, webhook_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + webhook_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> GetWebhookResponse: """ Parameters @@ -1720,7 +1739,10 @@ async def main() -> None: raise core_api_error_ApiError(status_code=_response.status_code, body=_response_json) async def delete_webhook( - self, webhook_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + webhook_id: str, + *, + request_options: typing.Optional[RequestOptions] = None, ) -> DeleteWebhookResponse: """ Parameters diff --git a/tests/utils/test_http_client.py b/tests/utils/test_http_client.py index a2a5554..e879636 100644 --- a/tests/utils/test_http_client.py +++ b/tests/utils/test_http_client.py @@ -14,7 +14,10 @@ def test_get_json_request_body() -> None: assert data_body is None json_body_extras, data_body_extras = get_request_body( - json={"goodbye": "world"}, data=None, request_options=get_request_options(), omit=None + json={"goodbye": "world"}, + data=None, + request_options=get_request_options(), + omit=None, ) assert json_body_extras == {"goodbye": "world", "see you": "later"} @@ -27,7 +30,10 @@ def test_get_files_request_body() -> None: assert json_body is None json_body_extras, data_body_extras = get_request_body( - json=None, data={"goodbye": "world"}, request_options=get_request_options(), omit=None + json=None, + data={"goodbye": "world"}, + request_options=get_request_options(), + omit=None, ) assert data_body_extras == {"goodbye": "world", "see you": "later"} diff --git a/tests/utils/test_query_encoding.py b/tests/utils/test_query_encoding.py index c8ac52d..63e1ed0 100644 --- a/tests/utils/test_query_encoding.py +++ b/tests/utils/test_query_encoding.py @@ -15,14 +15,26 @@ def test_query_encoding_deep_objects() -> None: def test_query_encoding_deep_object_arrays() -> None: - assert encode_query({"objects": [{"key": "hello", "value": "world"}, {"key": "foo", "value": "bar"}]}) == [ + assert encode_query( + { + "objects": [ + {"key": "hello", "value": "world"}, + {"key": "foo", "value": "bar"}, + ] + } + ) == [ ("objects[key]", "hello"), ("objects[value]", "world"), ("objects[key]", "foo"), ("objects[value]", "bar"), ] assert encode_query( - {"users": [{"name": "string", "tags": ["string"]}, {"name": "string2", "tags": ["string2", "string3"]}]} + { + "users": [ + {"name": "string", "tags": ["string"]}, + {"name": "string2", "tags": ["string2", "string3"]}, + ] + } ) == [ ("users[name]", "string"), ("users[tags]", "string"), diff --git a/tests/utils/test_serialization.py b/tests/utils/test_serialization.py index 8cc4d20..8efc1a6 100644 --- a/tests/utils/test_serialization.py +++ b/tests/utils/test_serialization.py @@ -21,21 +21,51 @@ def test_convert_and_respect_annotation_metadata() -> None: converted = convert_and_respect_annotation_metadata( object_=data, annotation=ObjectWithOptionalFieldParams, direction="write" ) - assert converted == {"string": "string", "long": 12345, "bool": True, "literal": "lit_one", "any": "any"} + assert converted == { + "string": "string", + "long": 12345, + "bool": True, + "literal": "lit_one", + "any": "any", + } def test_convert_and_respect_annotation_metadata_in_list() -> None: data: List[ObjectWithOptionalFieldParams] = [ - {"string": "string", "long_": 12345, "bool_": True, "literal": "lit_one", "any": "any"}, - {"string": "another string", "long_": 67890, "list_": [], "literal": "lit_one", "any": "any"}, + { + "string": "string", + "long_": 12345, + "bool_": True, + "literal": "lit_one", + "any": "any", + }, + { + "string": "another string", + "long_": 67890, + "list_": [], + "literal": "lit_one", + "any": "any", + }, ] converted = convert_and_respect_annotation_metadata( object_=data, annotation=List[ObjectWithOptionalFieldParams], direction="write" ) assert converted == [ - {"string": "string", "long": 12345, "bool": True, "literal": "lit_one", "any": "any"}, - {"string": "another string", "long": 67890, "list": [], "literal": "lit_one", "any": "any"}, + { + "string": "string", + "long": 12345, + "bool": True, + "literal": "lit_one", + "any": "any", + }, + { + "string": "another string", + "long": 67890, + "list": [], + "literal": "lit_one", + "any": "any", + }, ]