diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 5ce2ae1..0000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @SchematicHQ/devtools diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 1c1f594..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,88 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Overview - -This repository contains the Schematic Python SDK, which provides a convenient interface to the Schematic API for Python applications. The library includes type definitions for all request and response fields, and offers both synchronous and asynchronous clients powered by httpx. - -## Environment Setup - -```bash -# Install dependencies using Poetry -poetry install - -# Or install via pip -pip install schematichq -``` - -## Development Commands - -### Building and Testing - -```bash -# Run all tests -poetry run pytest - -# Run a specific test file -poetry run pytest tests/custom/test_client.py - -# Run tests with specific markers (e.g. asyncio) -poetry run pytest -m asyncio - -# Run tests with more verbose output -poetry run pytest -v -``` - -### Code Quality - -```bash -# Type checking -poetry run mypy src - -# Run linter -poetry run ruff check src -``` - -## Project Structure - -- `src/schematic/` - Main SDK code - - `client.py` - Main client entry point, provides Schematic and AsyncSchematic classes - - `base_client.py` - Base client implementation - - `event_buffer.py` - Buffer for events with retry logic - - `cache.py` - Local cache implementation for flag checks - - `core/` - Core functionality like HTTP client, API error handling - - `webhook_utils/` - Utilities for webhook verification - - Various services organized by API section (companies, events, features, etc.) - -## Key Components - -### Clients - -The SDK provides two main client classes: - -1. `Schematic` - Synchronous client -2. `AsyncSchematic` - Asynchronous client - -Both clients have the same interface but the async client returns awaitable objects. - -### Event Buffer - -The SDK implements an event buffer for batching events before sending them to the API. Events are automatically flushed periodically or when the buffer is full. The event buffer includes retry logic with exponential backoff. - -### Configuration - -Clients can be configured with: - -- Custom HTTP clients -- Flag defaults for offline/fallback mode -- Cache settings -- Timeout settings -- Retry settings - -### Webhook Verification - -The SDK provides utilities for verifying webhook signatures from Schematic to ensure security: - -- `verify_webhook_signature` - For web request verification -- `verify_signature` - For manual signature verification diff --git a/poetry.lock b/poetry.lock index c8e7e14..7f8488f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -38,13 +38,13 @@ trio = ["trio (>=0.26.1)"] [[package]] name = "certifi" -version = "2025.4.26" +version = "2025.8.3" description = "Python package for providing Mozilla's CA Bundle." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, - {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, + {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, + {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index 6336db8..360face 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "schematichq" [tool.poetry] name = "schematichq" -version = "1.0.9" +version = "1.1.0" description = "" readme = "README.md" authors = [] diff --git a/src/schematic/__init__.py b/src/schematic/__init__.py index d78c917..a88ea6c 100644 --- a/src/schematic/__init__.py +++ b/src/schematic/__init__.py @@ -10,10 +10,15 @@ ApiKeyResponseData, AudienceRequestBody, BillingCouponResponseData, + BillingCreditBundleResponseData, + BillingCreditBundleView, + BillingCreditGrantResponseData, + BillingCreditResponseData, BillingCustomerResponseData, BillingCustomerSubscription, BillingCustomerWithSubscriptionsResponseData, BillingMeterResponseData, + BillingPlanCreditGrantResponseData, BillingPriceResponseData, BillingPriceView, BillingProductDetailResponseData, @@ -44,6 +49,9 @@ CompanyPlanWithBillingSubView, CompanyResponseData, CompanySubscriptionResponseData, + CompanyViewWithFeatureUsageResponseData, + CompatiblePlans, + CompatiblePlansResponseData, ComponentCapabilities, ComponentHydrateResponseData, ComponentPreviewResponseData, @@ -67,6 +75,10 @@ CreateOrUpdateFlagRequestBody, CreateOrUpdateRuleRequestBody, CreateOrUpdateRuleRequestBodyRuleType, + CreatePriceTierRequestBody, + CreditBundlePurchaseResponseData, + CreditCompanyGrantView, + CreditTriggerConfig, CrmDealLineItem, CrmDealResponseData, CrmLineItemResponseData, @@ -101,6 +113,7 @@ FeatureCompanyUserResponseDataAllocationType, FeatureDetailResponseData, FeatureResponseData, + FeatureUsageDataResponseData, FeatureUsageDetailResponseData, FeatureUsageResponseData, FeatureUsageResponseDataAllocationType, @@ -118,9 +131,11 @@ PaymentMethodResponseData, PlanAudienceDetailResponseData, PlanAudienceResponseData, + PlanCreditGrantView, PlanDetailResponseData, PlanEntitlementResponseData, PlanEntitlementsOrder, + PlanGroupBundleOrder, PlanGroupDetailResponseData, PlanGroupPlanDetailResponseData, PlanGroupPlanEntitlementsOrder, @@ -146,6 +161,7 @@ StripeEmbedInfo, TemporaryAccessTokenResponseData, UpdateAddOnRequestBody, + UpdateCreditBundleRequestBody, UpdateEntitlementReqCommon, UpdateEntitlementReqCommonMetricPeriod, UpdateEntitlementReqCommonMetricPeriodMonthReset, @@ -157,6 +173,7 @@ UpsertUserRequestBody, UpsertUserSubRequestBody, UsageBasedEntitlementRequestBody, + UsageBasedEntitlementRequestBodyPriceBehavior, UsageBasedEntitlementResponseData, UserDetailResponseData, UserResponseData, @@ -172,6 +189,7 @@ checkout, companies, components, + credits, crm, dataexports, entitlements, @@ -214,7 +232,7 @@ CountCustomersParams, CountCustomersResponse, CreateBillingPriceRequestBodyBillingScheme, - CreateBillingPriceRequestBodyTierMode, + CreateBillingPriceRequestBodyTiersMode, CreateBillingPriceRequestBodyUsageType, CreateBillingSubscriptionsRequestBodyTrialEndSetting, DeleteBillingProductResponse, @@ -238,8 +256,10 @@ ListProductPricesResponse, ListProductPricesResponseParamsPriceUsageType, SearchBillingPricesParams, + SearchBillingPricesRequestTiersMode, SearchBillingPricesRequestUsageType, SearchBillingPricesResponse, + SearchBillingPricesResponseParamsTiersMode, SearchBillingPricesResponseParamsUsageType, UpsertBillingCouponResponse, UpsertBillingCustomerResponse, @@ -258,6 +278,10 @@ ) from .client import AsyncSchematic, AsyncSchematicConfig, LocalCache, Schematic, SchematicConfig from .companies import ( + CountCompaniesForAdvancedFilterParams, + CountCompaniesForAdvancedFilterRequestSortOrderDirection, + CountCompaniesForAdvancedFilterResponse, + CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection, CountCompaniesParams, CountCompaniesResponse, CountEntityKeyDefinitionsParams, @@ -270,15 +294,19 @@ CountEntityTraitDefinitionsResponse, CountEntityTraitDefinitionsResponseParamsEntityType, CountEntityTraitDefinitionsResponseParamsTraitType, + CountPlanTraitsParams, + CountPlanTraitsResponse, CountUsersParams, CountUsersResponse, CreateCompanyResponse, CreateEntityTraitDefinitionRequestBodyEntityType, CreateEntityTraitDefinitionRequestBodyTraitType, + CreatePlanTraitResponse, CreateUserResponse, DeleteCompanyByKeysResponse, DeleteCompanyMembershipResponse, DeleteCompanyResponse, + DeletePlanTraitResponse, DeleteUserByKeysResponse, DeleteUserResponse, GetActiveCompanySubscriptionParams, @@ -291,7 +319,12 @@ GetEntityTraitValuesResponse, GetOrCreateCompanyMembershipResponse, GetOrCreateEntityTraitDefinitionResponse, + GetPlanTraitResponse, GetUserResponse, + ListCompaniesForAdvancedFilterParams, + ListCompaniesForAdvancedFilterRequestSortOrderDirection, + ListCompaniesForAdvancedFilterResponse, + ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection, ListCompaniesParams, ListCompaniesResponse, ListCompanyMembershipsParams, @@ -306,6 +339,8 @@ ListEntityTraitDefinitionsResponse, ListEntityTraitDefinitionsResponseParamsEntityType, ListEntityTraitDefinitionsResponseParamsTraitType, + ListPlanTraitsParams, + ListPlanTraitsResponse, ListUsersParams, ListUsersResponse, LookupCompanyParams, @@ -314,6 +349,7 @@ LookupUserResponse, UpdateEntityTraitDefinitionRequestBodyTraitType, UpdateEntityTraitDefinitionResponse, + UpdatePlanTraitResponse, UpsertCompanyResponse, UpsertCompanyTraitResponse, UpsertUserResponse, @@ -334,6 +370,57 @@ UpdateComponentRequestBodyState, UpdateComponentResponse, ) +from .credits import ( + CountBillingCreditsGrantsParams, + CountBillingCreditsGrantsResponse, + CountBillingCreditsParams, + CountBillingCreditsResponse, + CountBillingPlanCreditGrantsParams, + CountBillingPlanCreditGrantsResponse, + CountCreditBundlesParams, + CountCreditBundlesRequestStatus, + CountCreditBundlesResponse, + CountCreditBundlesResponseParamsStatus, + CreateBillingCreditRequestBodyBurnStrategy, + CreateBillingCreditRequestBodyDefaultRolloverPolicy, + CreateBillingCreditResponse, + CreateBillingPlanCreditGrantRequestBodyResetCadence, + CreateBillingPlanCreditGrantRequestBodyResetStart, + CreateBillingPlanCreditGrantResponse, + CreateCreditBundleRequestBodyExpiryType, + CreateCreditBundleRequestBodyStatus, + CreateCreditBundleResponse, + DeleteBillingPlanCreditGrantResponse, + DeleteCreditBundleResponse, + GetCreditBundleResponse, + GetSingleBillingCreditResponse, + GrantBillingCreditsToCompanyResponse, + ListBillingCreditsParams, + ListBillingCreditsResponse, + ListBillingPlanCreditGrantsParams, + ListBillingPlanCreditGrantsResponse, + ListCompanyGrantsParams, + ListCompanyGrantsRequestDir, + ListCompanyGrantsRequestOrder, + ListCompanyGrantsResponse, + ListCompanyGrantsResponseParamsDir, + ListCompanyGrantsResponseParamsOrder, + ListCreditBundlesParams, + ListCreditBundlesRequestStatus, + ListCreditBundlesResponse, + ListCreditBundlesResponseParamsStatus, + ListGrantsForCreditParams, + ListGrantsForCreditResponse, + SoftDeleteBillingCreditResponse, + UpdateBillingCreditRequestBodyBurnStrategy, + UpdateBillingCreditRequestBodyDefaultRolloverPolicy, + UpdateBillingCreditResponse, + UpdateCreditBundleDetailsRequestBodyExpiryType, + UpdateCreditBundleDetailsRequestBodyStatus, + UpdateCreditBundleDetailsResponse, + ZeroOutGrantRequestBodyReason, + ZeroOutGrantResponse, +) from .crm import ( ListCrmProductsParams, ListCrmProductsResponse, @@ -360,6 +447,7 @@ CreateCompanyOverrideResponse, CreatePlanEntitlementRequestBodyMetricPeriod, CreatePlanEntitlementRequestBodyMetricPeriodMonthReset, + CreatePlanEntitlementRequestBodyPriceBehavior, CreatePlanEntitlementRequestBodyValueType, CreatePlanEntitlementResponse, DeleteCompanyOverrideResponse, @@ -384,6 +472,7 @@ UpdateCompanyOverrideResponse, UpdatePlanEntitlementRequestBodyMetricPeriod, UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset, + UpdatePlanEntitlementRequestBodyPriceBehavior, UpdatePlanEntitlementRequestBodyValueType, UpdatePlanEntitlementResponse, ) @@ -431,23 +520,16 @@ ) from .plangroups import CreatePlanGroupResponse, GetPlanGroupResponse, UpdatePlanGroupResponse from .plans import ( - CountPlanTraitsParams, - CountPlanTraitsResponse, CountPlansParams, CountPlansRequestPlanType, CountPlansResponse, CountPlansResponseParamsPlanType, CreatePlanRequestBodyPlanType, CreatePlanResponse, - CreatePlanTraitResponse, DeleteAudienceResponse, DeletePlanResponse, - DeletePlanTraitResponse, GetAudienceResponse, GetPlanResponse, - GetPlanTraitResponse, - ListPlanTraitsParams, - ListPlanTraitsResponse, ListPlansParams, ListPlansRequestPlanType, ListPlansResponse, @@ -455,7 +537,6 @@ UpdateAudienceResponse, UpdateCompanyPlansResponse, UpdatePlanResponse, - UpdatePlanTraitResponse, UpsertBillingProductPlanResponse, UpsertBillingProductRequestBodyChargeType, ) @@ -490,10 +571,15 @@ "AudienceRequestBody", "BadRequestError", "BillingCouponResponseData", + "BillingCreditBundleResponseData", + "BillingCreditBundleView", + "BillingCreditGrantResponseData", + "BillingCreditResponseData", "BillingCustomerResponseData", "BillingCustomerSubscription", "BillingCustomerWithSubscriptionsResponseData", "BillingMeterResponseData", + "BillingPlanCreditGrantResponseData", "BillingPriceResponseData", "BillingPriceView", "BillingProductDetailResponseData", @@ -527,6 +613,9 @@ "CompanyPlanWithBillingSubView", "CompanyResponseData", "CompanySubscriptionResponseData", + "CompanyViewWithFeatureUsageResponseData", + "CompatiblePlans", + "CompatiblePlansResponseData", "ComponentCapabilities", "ComponentHydrateResponseData", "ComponentPreviewResponseData", @@ -537,16 +626,30 @@ "CountApiRequestsResponse", "CountAudienceCompaniesResponse", "CountAudienceUsersResponse", + "CountBillingCreditsGrantsParams", + "CountBillingCreditsGrantsResponse", + "CountBillingCreditsParams", + "CountBillingCreditsResponse", + "CountBillingPlanCreditGrantsParams", + "CountBillingPlanCreditGrantsResponse", "CountBillingProductsParams", "CountBillingProductsRequestPriceUsageType", "CountBillingProductsResponse", "CountBillingProductsResponseParamsPriceUsageType", + "CountCompaniesForAdvancedFilterParams", + "CountCompaniesForAdvancedFilterRequestSortOrderDirection", + "CountCompaniesForAdvancedFilterResponse", + "CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection", "CountCompaniesParams", "CountCompaniesResponse", "CountCompanyOverridesParams", "CountCompanyOverridesResponse", "CountComponentsParams", "CountComponentsResponse", + "CountCreditBundlesParams", + "CountCreditBundlesRequestStatus", + "CountCreditBundlesResponse", + "CountCreditBundlesResponseParamsStatus", "CountCustomersParams", "CountCustomersResponse", "CountEntityKeyDefinitionsParams", @@ -586,8 +689,14 @@ "CountWebhooksResponse", "CouponRequestBody", "CreateApiKeyResponse", + "CreateBillingCreditRequestBodyBurnStrategy", + "CreateBillingCreditRequestBodyDefaultRolloverPolicy", + "CreateBillingCreditResponse", + "CreateBillingPlanCreditGrantRequestBodyResetCadence", + "CreateBillingPlanCreditGrantRequestBodyResetStart", + "CreateBillingPlanCreditGrantResponse", "CreateBillingPriceRequestBodyBillingScheme", - "CreateBillingPriceRequestBodyTierMode", + "CreateBillingPriceRequestBodyTiersMode", "CreateBillingPriceRequestBodyUsageType", "CreateBillingPriceTierRequestBody", "CreateBillingSubscriptionsRequestBodyTrialEndSetting", @@ -598,6 +707,9 @@ "CreateCompanyResponse", "CreateComponentRequestBodyEntityType", "CreateComponentResponse", + "CreateCreditBundleRequestBodyExpiryType", + "CreateCreditBundleRequestBodyStatus", + "CreateCreditBundleResponse", "CreateDataExportResponse", "CreateEntitlementReqCommon", "CreateEntitlementReqCommonMetricPeriod", @@ -627,15 +739,20 @@ "CreateOrUpdateRuleRequestBodyRuleType", "CreatePlanEntitlementRequestBodyMetricPeriod", "CreatePlanEntitlementRequestBodyMetricPeriodMonthReset", + "CreatePlanEntitlementRequestBodyPriceBehavior", "CreatePlanEntitlementRequestBodyValueType", "CreatePlanEntitlementResponse", "CreatePlanGroupResponse", "CreatePlanRequestBodyPlanType", "CreatePlanResponse", "CreatePlanTraitResponse", + "CreatePriceTierRequestBody", "CreateUserResponse", "CreateWebhookRequestBodyRequestTypesItem", "CreateWebhookResponse", + "CreditBundlePurchaseResponseData", + "CreditCompanyGrantView", + "CreditTriggerConfig", "CrmDealLineItem", "CrmDealResponseData", "CrmLineItemResponseData", @@ -646,12 +763,14 @@ "Decimal", "DeleteApiKeyResponse", "DeleteAudienceResponse", + "DeleteBillingPlanCreditGrantResponse", "DeleteBillingProductResponse", "DeleteCompanyByKeysResponse", "DeleteCompanyMembershipResponse", "DeleteCompanyOverrideResponse", "DeleteCompanyResponse", "DeleteComponentResponse", + "DeleteCreditBundleResponse", "DeleteEnvironmentResponse", "DeleteFeatureResponse", "DeleteFlagResponse", @@ -688,6 +807,7 @@ "FeatureCompanyUserResponseDataAllocationType", "FeatureDetailResponseData", "FeatureResponseData", + "FeatureUsageDataResponseData", "FeatureUsageDetailResponseData", "FeatureUsageResponseData", "FeatureUsageResponseDataAllocationType", @@ -706,6 +826,7 @@ "GetCompanyOverrideResponse", "GetCompanyResponse", "GetComponentResponse", + "GetCreditBundleResponse", "GetEntityTraitDefinitionResponse", "GetEntityTraitValuesParams", "GetEntityTraitValuesResponse", @@ -724,9 +845,11 @@ "GetPlanResponse", "GetPlanTraitResponse", "GetSegmentIntegrationStatusResponse", + "GetSingleBillingCreditResponse", "GetUserResponse", "GetWebhookEventResponse", "GetWebhookResponse", + "GrantBillingCreditsToCompanyResponse", "InternalServerError", "InvoiceRequestBody", "InvoiceResponseData", @@ -739,12 +862,26 @@ "ListApiRequestsResponse", "ListAudienceCompaniesResponse", "ListAudienceUsersResponse", + "ListBillingCreditsParams", + "ListBillingCreditsResponse", + "ListBillingPlanCreditGrantsParams", + "ListBillingPlanCreditGrantsResponse", "ListBillingProductsParams", "ListBillingProductsRequestPriceUsageType", "ListBillingProductsResponse", "ListBillingProductsResponseParamsPriceUsageType", + "ListCompaniesForAdvancedFilterParams", + "ListCompaniesForAdvancedFilterRequestSortOrderDirection", + "ListCompaniesForAdvancedFilterResponse", + "ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection", "ListCompaniesParams", "ListCompaniesResponse", + "ListCompanyGrantsParams", + "ListCompanyGrantsRequestDir", + "ListCompanyGrantsRequestOrder", + "ListCompanyGrantsResponse", + "ListCompanyGrantsResponseParamsDir", + "ListCompanyGrantsResponseParamsOrder", "ListCompanyMembershipsParams", "ListCompanyMembershipsResponse", "ListCompanyOverridesParams", @@ -753,6 +890,10 @@ "ListComponentsResponse", "ListCouponsParams", "ListCouponsResponse", + "ListCreditBundlesParams", + "ListCreditBundlesRequestStatus", + "ListCreditBundlesResponse", + "ListCreditBundlesResponseParamsStatus", "ListCrmProductsParams", "ListCrmProductsResponse", "ListCustomersWithSubscriptionsParams", @@ -783,6 +924,8 @@ "ListFeaturesResponse", "ListFlagsParams", "ListFlagsResponse", + "ListGrantsForCreditParams", + "ListGrantsForCreditResponse", "ListInvoicesParams", "ListInvoicesResponse", "ListMetersParams", @@ -820,9 +963,11 @@ "PaymentMethodResponseData", "PlanAudienceDetailResponseData", "PlanAudienceResponseData", + "PlanCreditGrantView", "PlanDetailResponseData", "PlanEntitlementResponseData", "PlanEntitlementsOrder", + "PlanGroupBundleOrder", "PlanGroupDetailResponseData", "PlanGroupPlanDetailResponseData", "PlanGroupPlanEntitlementsOrder", @@ -852,16 +997,22 @@ "SchematicConfig", "SchematicEnvironment", "SearchBillingPricesParams", + "SearchBillingPricesRequestTiersMode", "SearchBillingPricesRequestUsageType", "SearchBillingPricesResponse", + "SearchBillingPricesResponseParamsTiersMode", "SearchBillingPricesResponseParamsUsageType", "SegmentStatusResp", + "SoftDeleteBillingCreditResponse", "StripeEmbedInfo", "TemporaryAccessTokenResponseData", "UnauthorizedError", "UpdateAddOnRequestBody", "UpdateApiKeyResponse", "UpdateAudienceResponse", + "UpdateBillingCreditRequestBodyBurnStrategy", + "UpdateBillingCreditRequestBodyDefaultRolloverPolicy", + "UpdateBillingCreditResponse", "UpdateCompanyOverrideRequestBodyMetricPeriod", "UpdateCompanyOverrideRequestBodyMetricPeriodMonthReset", "UpdateCompanyOverrideRequestBodyValueType", @@ -870,6 +1021,10 @@ "UpdateComponentRequestBodyEntityType", "UpdateComponentRequestBodyState", "UpdateComponentResponse", + "UpdateCreditBundleDetailsRequestBodyExpiryType", + "UpdateCreditBundleDetailsRequestBodyStatus", + "UpdateCreditBundleDetailsResponse", + "UpdateCreditBundleRequestBody", "UpdateCustomerSubscriptionTrialEndResponse", "UpdateEntitlementReqCommon", "UpdateEntitlementReqCommonMetricPeriod", @@ -887,6 +1042,7 @@ "UpdatePayInAdvanceRequestBody", "UpdatePlanEntitlementRequestBodyMetricPeriod", "UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset", + "UpdatePlanEntitlementRequestBodyPriceBehavior", "UpdatePlanEntitlementRequestBodyValueType", "UpdatePlanEntitlementResponse", "UpdatePlanGroupResponse", @@ -919,12 +1075,15 @@ "UpsertUserSubRequestBody", "UpsertUserTraitResponse", "UsageBasedEntitlementRequestBody", + "UsageBasedEntitlementRequestBodyPriceBehavior", "UsageBasedEntitlementResponseData", "UserDetailResponseData", "UserResponseData", "WebhookEventDetailResponseData", "WebhookEventResponseData", "WebhookResponseData", + "ZeroOutGrantRequestBodyReason", + "ZeroOutGrantResponse", "__version__", "accesstokens", "accounts", @@ -932,6 +1091,7 @@ "checkout", "companies", "components", + "credits", "crm", "dataexports", "entitlements", diff --git a/src/schematic/base_client.py b/src/schematic/base_client.py index be97605..2d6f1b9 100644 --- a/src/schematic/base_client.py +++ b/src/schematic/base_client.py @@ -10,6 +10,7 @@ from .companies.client import AsyncCompaniesClient, CompaniesClient from .components.client import AsyncComponentsClient, ComponentsClient from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from .credits.client import AsyncCreditsClient, CreditsClient from .crm.client import AsyncCrmClient, CrmClient from .dataexports.client import AsyncDataexportsClient, DataexportsClient from .entitlements.client import AsyncEntitlementsClient, EntitlementsClient @@ -84,6 +85,7 @@ def __init__( self.accounts = AccountsClient(client_wrapper=self._client_wrapper) self.features = FeaturesClient(client_wrapper=self._client_wrapper) self.billing = BillingClient(client_wrapper=self._client_wrapper) + self.credits = CreditsClient(client_wrapper=self._client_wrapper) self.checkout = CheckoutClient(client_wrapper=self._client_wrapper) self.companies = CompaniesClient(client_wrapper=self._client_wrapper) self.entitlements = EntitlementsClient(client_wrapper=self._client_wrapper) @@ -160,6 +162,7 @@ def __init__( self.accounts = AsyncAccountsClient(client_wrapper=self._client_wrapper) self.features = AsyncFeaturesClient(client_wrapper=self._client_wrapper) self.billing = AsyncBillingClient(client_wrapper=self._client_wrapper) + self.credits = AsyncCreditsClient(client_wrapper=self._client_wrapper) self.checkout = AsyncCheckoutClient(client_wrapper=self._client_wrapper) self.companies = AsyncCompaniesClient(client_wrapper=self._client_wrapper) self.entitlements = AsyncEntitlementsClient(client_wrapper=self._client_wrapper) diff --git a/src/schematic/billing/__init__.py b/src/schematic/billing/__init__.py index 616d7bf..0b41c97 100644 --- a/src/schematic/billing/__init__.py +++ b/src/schematic/billing/__init__.py @@ -10,7 +10,7 @@ CountCustomersParams, CountCustomersResponse, CreateBillingPriceRequestBodyBillingScheme, - CreateBillingPriceRequestBodyTierMode, + CreateBillingPriceRequestBodyTiersMode, CreateBillingPriceRequestBodyUsageType, CreateBillingSubscriptionsRequestBodyTrialEndSetting, DeleteBillingProductResponse, @@ -34,8 +34,10 @@ ListProductPricesResponse, ListProductPricesResponseParamsPriceUsageType, SearchBillingPricesParams, + SearchBillingPricesRequestTiersMode, SearchBillingPricesRequestUsageType, SearchBillingPricesResponse, + SearchBillingPricesResponseParamsTiersMode, SearchBillingPricesResponseParamsUsageType, UpsertBillingCouponResponse, UpsertBillingCustomerResponse, @@ -55,7 +57,7 @@ "CountCustomersParams", "CountCustomersResponse", "CreateBillingPriceRequestBodyBillingScheme", - "CreateBillingPriceRequestBodyTierMode", + "CreateBillingPriceRequestBodyTiersMode", "CreateBillingPriceRequestBodyUsageType", "CreateBillingSubscriptionsRequestBodyTrialEndSetting", "DeleteBillingProductResponse", @@ -79,8 +81,10 @@ "ListProductPricesResponse", "ListProductPricesResponseParamsPriceUsageType", "SearchBillingPricesParams", + "SearchBillingPricesRequestTiersMode", "SearchBillingPricesRequestUsageType", "SearchBillingPricesResponse", + "SearchBillingPricesResponseParamsTiersMode", "SearchBillingPricesResponseParamsUsageType", "UpsertBillingCouponResponse", "UpsertBillingCustomerResponse", diff --git a/src/schematic/billing/client.py b/src/schematic/billing/client.py index dece3ee..07ee0b7 100644 --- a/src/schematic/billing/client.py +++ b/src/schematic/billing/client.py @@ -13,7 +13,7 @@ from .types.count_billing_products_response import CountBillingProductsResponse from .types.count_customers_response import CountCustomersResponse from .types.create_billing_price_request_body_billing_scheme import CreateBillingPriceRequestBodyBillingScheme -from .types.create_billing_price_request_body_tier_mode import CreateBillingPriceRequestBodyTierMode +from .types.create_billing_price_request_body_tiers_mode import CreateBillingPriceRequestBodyTiersMode from .types.create_billing_price_request_body_usage_type import CreateBillingPriceRequestBodyUsageType from .types.create_billing_subscriptions_request_body_trial_end_setting import ( CreateBillingSubscriptionsRequestBodyTrialEndSetting, @@ -29,6 +29,7 @@ from .types.list_payment_methods_response import ListPaymentMethodsResponse from .types.list_product_prices_request_price_usage_type import ListProductPricesRequestPriceUsageType from .types.list_product_prices_response import ListProductPricesResponse +from .types.search_billing_prices_request_tiers_mode import SearchBillingPricesRequestTiersMode from .types.search_billing_prices_request_usage_type import SearchBillingPricesRequestUsageType from .types.search_billing_prices_response import SearchBillingPricesResponse from .types.upsert_billing_coupon_response import UpsertBillingCouponResponse @@ -358,8 +359,8 @@ def list_invoices( self, *, customer_external_id: str, + subscription_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, @@ -369,9 +370,9 @@ def list_invoices( ---------- customer_external_id : str - company_id : typing.Optional[str] + subscription_external_id : str - subscription_external_id : typing.Optional[str] + company_id : typing.Optional[str] limit : typing.Optional[int] Page limit (default 100) @@ -396,12 +397,13 @@ def list_invoices( ) client.billing.list_invoices( customer_external_id="customer_external_id", + subscription_external_id="subscription_external_id", ) """ _response = self._raw_client.list_invoices( customer_external_id=customer_external_id, - company_id=company_id, subscription_external_id=subscription_external_id, + company_id=company_id, limit=limit, offset=offset, request_options=request_options, @@ -726,6 +728,7 @@ def search_billing_prices( interval: typing.Optional[str] = None, usage_type: typing.Optional[SearchBillingPricesRequestUsageType] = None, price: typing.Optional[int] = None, + tiers_mode: typing.Optional[SearchBillingPricesRequestTiersMode] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -743,6 +746,8 @@ def search_billing_prices( price : typing.Optional[int] + tiers_mode : typing.Optional[SearchBillingPricesRequestTiersMode] + limit : typing.Optional[int] Page limit (default 100) @@ -772,6 +777,7 @@ def search_billing_prices( interval=interval, usage_type=usage_type, price=price, + tiers_mode=tiers_mode, limit=limit, offset=offset, request_options=request_options, @@ -794,7 +800,7 @@ def upsert_billing_price( meter_id: typing.Optional[str] = OMIT, package_size: typing.Optional[int] = OMIT, price_decimal: typing.Optional[str] = OMIT, - tier_mode: typing.Optional[CreateBillingPriceRequestBodyTierMode] = OMIT, + tiers_mode: typing.Optional[CreateBillingPriceRequestBodyTiersMode] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertBillingPriceResponse: """ @@ -826,7 +832,7 @@ def upsert_billing_price( price_decimal : typing.Optional[str] - tier_mode : typing.Optional[CreateBillingPriceRequestBodyTierMode] + tiers_mode : typing.Optional[CreateBillingPriceRequestBodyTiersMode] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -874,7 +880,7 @@ def upsert_billing_price( meter_id=meter_id, package_size=package_size, price_decimal=price_decimal, - tier_mode=tier_mode, + tiers_mode=tiers_mode, request_options=request_options, ) return _response.data @@ -1719,8 +1725,8 @@ async def list_invoices( self, *, customer_external_id: str, + subscription_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, @@ -1730,9 +1736,9 @@ async def list_invoices( ---------- customer_external_id : str - company_id : typing.Optional[str] + subscription_external_id : str - subscription_external_id : typing.Optional[str] + company_id : typing.Optional[str] limit : typing.Optional[int] Page limit (default 100) @@ -1762,6 +1768,7 @@ async def list_invoices( async def main() -> None: await client.billing.list_invoices( customer_external_id="customer_external_id", + subscription_external_id="subscription_external_id", ) @@ -1769,8 +1776,8 @@ async def main() -> None: """ _response = await self._raw_client.list_invoices( customer_external_id=customer_external_id, - company_id=company_id, subscription_external_id=subscription_external_id, + company_id=company_id, limit=limit, offset=offset, request_options=request_options, @@ -2135,6 +2142,7 @@ async def search_billing_prices( interval: typing.Optional[str] = None, usage_type: typing.Optional[SearchBillingPricesRequestUsageType] = None, price: typing.Optional[int] = None, + tiers_mode: typing.Optional[SearchBillingPricesRequestTiersMode] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -2152,6 +2160,8 @@ async def search_billing_prices( price : typing.Optional[int] + tiers_mode : typing.Optional[SearchBillingPricesRequestTiersMode] + limit : typing.Optional[int] Page limit (default 100) @@ -2189,6 +2199,7 @@ async def main() -> None: interval=interval, usage_type=usage_type, price=price, + tiers_mode=tiers_mode, limit=limit, offset=offset, request_options=request_options, @@ -2211,7 +2222,7 @@ async def upsert_billing_price( meter_id: typing.Optional[str] = OMIT, package_size: typing.Optional[int] = OMIT, price_decimal: typing.Optional[str] = OMIT, - tier_mode: typing.Optional[CreateBillingPriceRequestBodyTierMode] = OMIT, + tiers_mode: typing.Optional[CreateBillingPriceRequestBodyTiersMode] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertBillingPriceResponse: """ @@ -2243,7 +2254,7 @@ async def upsert_billing_price( price_decimal : typing.Optional[str] - tier_mode : typing.Optional[CreateBillingPriceRequestBodyTierMode] + tiers_mode : typing.Optional[CreateBillingPriceRequestBodyTiersMode] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -2299,7 +2310,7 @@ async def main() -> None: meter_id=meter_id, package_size=package_size, price_decimal=price_decimal, - tier_mode=tier_mode, + tiers_mode=tiers_mode, request_options=request_options, ) return _response.data diff --git a/src/schematic/billing/raw_client.py b/src/schematic/billing/raw_client.py index 73663af..485b0e3 100644 --- a/src/schematic/billing/raw_client.py +++ b/src/schematic/billing/raw_client.py @@ -24,7 +24,7 @@ from .types.count_billing_products_response import CountBillingProductsResponse from .types.count_customers_response import CountCustomersResponse from .types.create_billing_price_request_body_billing_scheme import CreateBillingPriceRequestBodyBillingScheme -from .types.create_billing_price_request_body_tier_mode import CreateBillingPriceRequestBodyTierMode +from .types.create_billing_price_request_body_tiers_mode import CreateBillingPriceRequestBodyTiersMode from .types.create_billing_price_request_body_usage_type import CreateBillingPriceRequestBodyUsageType from .types.create_billing_subscriptions_request_body_trial_end_setting import ( CreateBillingSubscriptionsRequestBodyTrialEndSetting, @@ -40,6 +40,7 @@ from .types.list_payment_methods_response import ListPaymentMethodsResponse from .types.list_product_prices_request_price_usage_type import ListProductPricesRequestPriceUsageType from .types.list_product_prices_response import ListProductPricesResponse +from .types.search_billing_prices_request_tiers_mode import SearchBillingPricesRequestTiersMode from .types.search_billing_prices_request_usage_type import SearchBillingPricesRequestUsageType from .types.search_billing_prices_response import SearchBillingPricesResponse from .types.upsert_billing_coupon_response import UpsertBillingCouponResponse @@ -690,8 +691,8 @@ def list_invoices( self, *, customer_external_id: str, + subscription_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, @@ -701,9 +702,9 @@ def list_invoices( ---------- customer_external_id : str - company_id : typing.Optional[str] + subscription_external_id : str - subscription_external_id : typing.Optional[str] + company_id : typing.Optional[str] limit : typing.Optional[int] Page limit (default 100) @@ -1454,6 +1455,7 @@ def search_billing_prices( interval: typing.Optional[str] = None, usage_type: typing.Optional[SearchBillingPricesRequestUsageType] = None, price: typing.Optional[int] = None, + tiers_mode: typing.Optional[SearchBillingPricesRequestTiersMode] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -1471,6 +1473,8 @@ def search_billing_prices( price : typing.Optional[int] + tiers_mode : typing.Optional[SearchBillingPricesRequestTiersMode] + limit : typing.Optional[int] Page limit (default 100) @@ -1494,6 +1498,7 @@ def search_billing_prices( "interval": interval, "usage_type": usage_type, "price": price, + "tiers_mode": tiers_mode, "limit": limit, "offset": offset, }, @@ -1589,7 +1594,7 @@ def upsert_billing_price( meter_id: typing.Optional[str] = OMIT, package_size: typing.Optional[int] = OMIT, price_decimal: typing.Optional[str] = OMIT, - tier_mode: typing.Optional[CreateBillingPriceRequestBodyTierMode] = OMIT, + tiers_mode: typing.Optional[CreateBillingPriceRequestBodyTiersMode] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[UpsertBillingPriceResponse]: """ @@ -1621,7 +1626,7 @@ def upsert_billing_price( price_decimal : typing.Optional[str] - tier_mode : typing.Optional[CreateBillingPriceRequestBodyTierMode] + tiers_mode : typing.Optional[CreateBillingPriceRequestBodyTiersMode] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1651,7 +1656,7 @@ def upsert_billing_price( direction="write", ), "product_external_id": product_external_id, - "tier_mode": tier_mode, + "tiers_mode": tiers_mode, "usage_type": usage_type, }, headers={ @@ -3296,8 +3301,8 @@ async def list_invoices( self, *, customer_external_id: str, + subscription_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, @@ -3307,9 +3312,9 @@ async def list_invoices( ---------- customer_external_id : str - company_id : typing.Optional[str] + subscription_external_id : str - subscription_external_id : typing.Optional[str] + company_id : typing.Optional[str] limit : typing.Optional[int] Page limit (default 100) @@ -4060,6 +4065,7 @@ async def search_billing_prices( interval: typing.Optional[str] = None, usage_type: typing.Optional[SearchBillingPricesRequestUsageType] = None, price: typing.Optional[int] = None, + tiers_mode: typing.Optional[SearchBillingPricesRequestTiersMode] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -4077,6 +4083,8 @@ async def search_billing_prices( price : typing.Optional[int] + tiers_mode : typing.Optional[SearchBillingPricesRequestTiersMode] + limit : typing.Optional[int] Page limit (default 100) @@ -4100,6 +4108,7 @@ async def search_billing_prices( "interval": interval, "usage_type": usage_type, "price": price, + "tiers_mode": tiers_mode, "limit": limit, "offset": offset, }, @@ -4195,7 +4204,7 @@ async def upsert_billing_price( meter_id: typing.Optional[str] = OMIT, package_size: typing.Optional[int] = OMIT, price_decimal: typing.Optional[str] = OMIT, - tier_mode: typing.Optional[CreateBillingPriceRequestBodyTierMode] = OMIT, + tiers_mode: typing.Optional[CreateBillingPriceRequestBodyTiersMode] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[UpsertBillingPriceResponse]: """ @@ -4227,7 +4236,7 @@ async def upsert_billing_price( price_decimal : typing.Optional[str] - tier_mode : typing.Optional[CreateBillingPriceRequestBodyTierMode] + tiers_mode : typing.Optional[CreateBillingPriceRequestBodyTiersMode] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -4257,7 +4266,7 @@ async def upsert_billing_price( direction="write", ), "product_external_id": product_external_id, - "tier_mode": tier_mode, + "tiers_mode": tiers_mode, "usage_type": usage_type, }, headers={ diff --git a/src/schematic/billing/types/__init__.py b/src/schematic/billing/types/__init__.py index b86fa60..c1b6b89 100644 --- a/src/schematic/billing/types/__init__.py +++ b/src/schematic/billing/types/__init__.py @@ -9,7 +9,7 @@ from .count_customers_params import CountCustomersParams from .count_customers_response import CountCustomersResponse from .create_billing_price_request_body_billing_scheme import CreateBillingPriceRequestBodyBillingScheme -from .create_billing_price_request_body_tier_mode import CreateBillingPriceRequestBodyTierMode +from .create_billing_price_request_body_tiers_mode import CreateBillingPriceRequestBodyTiersMode from .create_billing_price_request_body_usage_type import CreateBillingPriceRequestBodyUsageType from .create_billing_subscriptions_request_body_trial_end_setting import ( CreateBillingSubscriptionsRequestBodyTrialEndSetting, @@ -35,8 +35,10 @@ 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_tiers_mode import SearchBillingPricesRequestTiersMode from .search_billing_prices_request_usage_type import SearchBillingPricesRequestUsageType from .search_billing_prices_response import SearchBillingPricesResponse +from .search_billing_prices_response_params_tiers_mode import SearchBillingPricesResponseParamsTiersMode from .search_billing_prices_response_params_usage_type import SearchBillingPricesResponseParamsUsageType from .upsert_billing_coupon_response import UpsertBillingCouponResponse from .upsert_billing_customer_response import UpsertBillingCustomerResponse @@ -55,7 +57,7 @@ "CountCustomersParams", "CountCustomersResponse", "CreateBillingPriceRequestBodyBillingScheme", - "CreateBillingPriceRequestBodyTierMode", + "CreateBillingPriceRequestBodyTiersMode", "CreateBillingPriceRequestBodyUsageType", "CreateBillingSubscriptionsRequestBodyTrialEndSetting", "DeleteBillingProductResponse", @@ -79,8 +81,10 @@ "ListProductPricesResponse", "ListProductPricesResponseParamsPriceUsageType", "SearchBillingPricesParams", + "SearchBillingPricesRequestTiersMode", "SearchBillingPricesRequestUsageType", "SearchBillingPricesResponse", + "SearchBillingPricesResponseParamsTiersMode", "SearchBillingPricesResponseParamsUsageType", "UpsertBillingCouponResponse", "UpsertBillingCustomerResponse", 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 deleted file mode 100644 index d32a69b..0000000 --- a/src/schematic/billing/types/create_billing_price_request_body_tier_mode.py +++ /dev/null @@ -1,5 +0,0 @@ -# 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_price_request_body_tiers_mode.py b/src/schematic/billing/types/create_billing_price_request_body_tiers_mode.py new file mode 100644 index 0000000..5ae3485 --- /dev/null +++ b/src/schematic/billing/types/create_billing_price_request_body_tiers_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateBillingPriceRequestBodyTiersMode = typing.Union[typing.Literal["volume", "graduated"], typing.Any] diff --git a/src/schematic/billing/types/search_billing_prices_params.py b/src/schematic/billing/types/search_billing_prices_params.py index 4597ca3..1e590aa 100644 --- a/src/schematic/billing/types/search_billing_prices_params.py +++ b/src/schematic/billing/types/search_billing_prices_params.py @@ -4,6 +4,7 @@ import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .search_billing_prices_response_params_tiers_mode import SearchBillingPricesResponseParamsTiersMode from .search_billing_prices_response_params_usage_type import SearchBillingPricesResponseParamsUsageType @@ -26,6 +27,7 @@ class SearchBillingPricesParams(UniversalBaseModel): price: typing.Optional[int] = None q: typing.Optional[str] = None + tiers_mode: typing.Optional[SearchBillingPricesResponseParamsTiersMode] = None usage_type: typing.Optional[SearchBillingPricesResponseParamsUsageType] = None if IS_PYDANTIC_V2: diff --git a/src/schematic/billing/types/search_billing_prices_request_tiers_mode.py b/src/schematic/billing/types/search_billing_prices_request_tiers_mode.py new file mode 100644 index 0000000..35ed12d --- /dev/null +++ b/src/schematic/billing/types/search_billing_prices_request_tiers_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +SearchBillingPricesRequestTiersMode = typing.Union[typing.Literal["volume", "graduated"], typing.Any] diff --git a/src/schematic/billing/types/search_billing_prices_response_params_tiers_mode.py b/src/schematic/billing/types/search_billing_prices_response_params_tiers_mode.py new file mode 100644 index 0000000..734091d --- /dev/null +++ b/src/schematic/billing/types/search_billing_prices_response_params_tiers_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +SearchBillingPricesResponseParamsTiersMode = typing.Union[typing.Literal["volume", "graduated"], typing.Any] diff --git a/src/schematic/checkout/client.py b/src/schematic/checkout/client.py index 1eecfaa..859b715 100644 --- a/src/schematic/checkout/client.py +++ b/src/schematic/checkout/client.py @@ -6,6 +6,7 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions from ..types.update_add_on_request_body import UpdateAddOnRequestBody +from ..types.update_credit_bundle_request_body import UpdateCreditBundleRequestBody from ..types.update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody from .raw_client import AsyncRawCheckoutClient, RawCheckoutClient from .types.checkout_internal_response import CheckoutInternalResponse @@ -37,9 +38,11 @@ def internal( *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], company_id: str, + credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, new_price_id: str, pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody], + skip_trial: bool, coupon_external_id: typing.Optional[str] = OMIT, payment_method_id: typing.Optional[str] = OMIT, promo_code: typing.Optional[str] = OMIT, @@ -52,12 +55,16 @@ def internal( company_id : str + credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] + new_plan_id : str new_price_id : str pay_in_advance : typing.Sequence[UpdatePayInAdvanceRequestBody] + skip_trial : bool + coupon_external_id : typing.Optional[str] payment_method_id : typing.Optional[str] @@ -77,6 +84,7 @@ def internal( from schematic import ( Schematic, UpdateAddOnRequestBody, + UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody, ) @@ -91,6 +99,12 @@ def internal( ) ], company_id="company_id", + credit_bundles=[ + UpdateCreditBundleRequestBody( + bundle_id="bundle_id", + quantity=1, + ) + ], new_plan_id="new_plan_id", new_price_id="new_price_id", pay_in_advance=[ @@ -99,14 +113,17 @@ def internal( quantity=1, ) ], + skip_trial=True, ) """ _response = self._raw_client.internal( add_on_ids=add_on_ids, company_id=company_id, + credit_bundles=credit_bundles, new_plan_id=new_plan_id, new_price_id=new_price_id, pay_in_advance=pay_in_advance, + skip_trial=skip_trial, coupon_external_id=coupon_external_id, payment_method_id=payment_method_id, promo_code=promo_code, @@ -157,9 +174,11 @@ def preview_checkout_internal( *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], company_id: str, + credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, new_price_id: str, pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody], + skip_trial: bool, coupon_external_id: typing.Optional[str] = OMIT, payment_method_id: typing.Optional[str] = OMIT, promo_code: typing.Optional[str] = OMIT, @@ -172,12 +191,16 @@ def preview_checkout_internal( company_id : str + credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] + new_plan_id : str new_price_id : str pay_in_advance : typing.Sequence[UpdatePayInAdvanceRequestBody] + skip_trial : bool + coupon_external_id : typing.Optional[str] payment_method_id : typing.Optional[str] @@ -197,6 +220,7 @@ def preview_checkout_internal( from schematic import ( Schematic, UpdateAddOnRequestBody, + UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody, ) @@ -211,6 +235,12 @@ def preview_checkout_internal( ) ], company_id="company_id", + credit_bundles=[ + UpdateCreditBundleRequestBody( + bundle_id="bundle_id", + quantity=1, + ) + ], new_plan_id="new_plan_id", new_price_id="new_price_id", pay_in_advance=[ @@ -219,14 +249,17 @@ def preview_checkout_internal( quantity=1, ) ], + skip_trial=True, ) """ _response = self._raw_client.preview_checkout_internal( add_on_ids=add_on_ids, company_id=company_id, + credit_bundles=credit_bundles, new_plan_id=new_plan_id, new_price_id=new_price_id, pay_in_advance=pay_in_advance, + skip_trial=skip_trial, coupon_external_id=coupon_external_id, payment_method_id=payment_method_id, promo_code=promo_code, @@ -294,9 +327,11 @@ async def internal( *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], company_id: str, + credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, new_price_id: str, pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody], + skip_trial: bool, coupon_external_id: typing.Optional[str] = OMIT, payment_method_id: typing.Optional[str] = OMIT, promo_code: typing.Optional[str] = OMIT, @@ -309,12 +344,16 @@ async def internal( company_id : str + credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] + new_plan_id : str new_price_id : str pay_in_advance : typing.Sequence[UpdatePayInAdvanceRequestBody] + skip_trial : bool + coupon_external_id : typing.Optional[str] payment_method_id : typing.Optional[str] @@ -336,6 +375,7 @@ async def internal( from schematic import ( AsyncSchematic, UpdateAddOnRequestBody, + UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody, ) @@ -353,6 +393,12 @@ async def main() -> None: ) ], company_id="company_id", + credit_bundles=[ + UpdateCreditBundleRequestBody( + bundle_id="bundle_id", + quantity=1, + ) + ], new_plan_id="new_plan_id", new_price_id="new_price_id", pay_in_advance=[ @@ -361,6 +407,7 @@ async def main() -> None: quantity=1, ) ], + skip_trial=True, ) @@ -369,9 +416,11 @@ async def main() -> None: _response = await self._raw_client.internal( add_on_ids=add_on_ids, company_id=company_id, + credit_bundles=credit_bundles, new_plan_id=new_plan_id, new_price_id=new_price_id, pay_in_advance=pay_in_advance, + skip_trial=skip_trial, coupon_external_id=coupon_external_id, payment_method_id=payment_method_id, promo_code=promo_code, @@ -430,9 +479,11 @@ async def preview_checkout_internal( *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], company_id: str, + credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, new_price_id: str, pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody], + skip_trial: bool, coupon_external_id: typing.Optional[str] = OMIT, payment_method_id: typing.Optional[str] = OMIT, promo_code: typing.Optional[str] = OMIT, @@ -445,12 +496,16 @@ async def preview_checkout_internal( company_id : str + credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] + new_plan_id : str new_price_id : str pay_in_advance : typing.Sequence[UpdatePayInAdvanceRequestBody] + skip_trial : bool + coupon_external_id : typing.Optional[str] payment_method_id : typing.Optional[str] @@ -472,6 +527,7 @@ async def preview_checkout_internal( from schematic import ( AsyncSchematic, UpdateAddOnRequestBody, + UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody, ) @@ -489,6 +545,12 @@ async def main() -> None: ) ], company_id="company_id", + credit_bundles=[ + UpdateCreditBundleRequestBody( + bundle_id="bundle_id", + quantity=1, + ) + ], new_plan_id="new_plan_id", new_price_id="new_price_id", pay_in_advance=[ @@ -497,6 +559,7 @@ async def main() -> None: quantity=1, ) ], + skip_trial=True, ) @@ -505,9 +568,11 @@ async def main() -> None: _response = await self._raw_client.preview_checkout_internal( add_on_ids=add_on_ids, company_id=company_id, + credit_bundles=credit_bundles, new_plan_id=new_plan_id, new_price_id=new_price_id, pay_in_advance=pay_in_advance, + skip_trial=skip_trial, coupon_external_id=coupon_external_id, payment_method_id=payment_method_id, promo_code=promo_code, diff --git a/src/schematic/checkout/raw_client.py b/src/schematic/checkout/raw_client.py index 916797f..c8244f2 100644 --- a/src/schematic/checkout/raw_client.py +++ b/src/schematic/checkout/raw_client.py @@ -18,6 +18,7 @@ from ..errors.unauthorized_error import UnauthorizedError from ..types.api_error import ApiError as types_api_error_ApiError from ..types.update_add_on_request_body import UpdateAddOnRequestBody +from ..types.update_credit_bundle_request_body import UpdateCreditBundleRequestBody from ..types.update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody from .types.checkout_internal_response import CheckoutInternalResponse from .types.get_checkout_data_response import GetCheckoutDataResponse @@ -37,9 +38,11 @@ def internal( *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], company_id: str, + credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, new_price_id: str, pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody], + skip_trial: bool, coupon_external_id: typing.Optional[str] = OMIT, payment_method_id: typing.Optional[str] = OMIT, promo_code: typing.Optional[str] = OMIT, @@ -52,12 +55,16 @@ def internal( company_id : str + credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] + new_plan_id : str new_price_id : str pay_in_advance : typing.Sequence[UpdatePayInAdvanceRequestBody] + skip_trial : bool + coupon_external_id : typing.Optional[str] payment_method_id : typing.Optional[str] @@ -81,6 +88,9 @@ def internal( ), "company_id": company_id, "coupon_external_id": coupon_external_id, + "credit_bundles": convert_and_respect_annotation_metadata( + object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write" + ), "new_plan_id": new_plan_id, "new_price_id": new_price_id, "pay_in_advance": convert_and_respect_annotation_metadata( @@ -88,6 +98,7 @@ def internal( ), "payment_method_id": payment_method_id, "promo_code": promo_code, + "skip_trial": skip_trial, }, headers={ "content-type": "application/json", @@ -283,9 +294,11 @@ def preview_checkout_internal( *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], company_id: str, + credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, new_price_id: str, pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody], + skip_trial: bool, coupon_external_id: typing.Optional[str] = OMIT, payment_method_id: typing.Optional[str] = OMIT, promo_code: typing.Optional[str] = OMIT, @@ -298,12 +311,16 @@ def preview_checkout_internal( company_id : str + credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] + new_plan_id : str new_price_id : str pay_in_advance : typing.Sequence[UpdatePayInAdvanceRequestBody] + skip_trial : bool + coupon_external_id : typing.Optional[str] payment_method_id : typing.Optional[str] @@ -327,6 +344,9 @@ def preview_checkout_internal( ), "company_id": company_id, "coupon_external_id": coupon_external_id, + "credit_bundles": convert_and_respect_annotation_metadata( + object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write" + ), "new_plan_id": new_plan_id, "new_price_id": new_price_id, "pay_in_advance": convert_and_respect_annotation_metadata( @@ -334,6 +354,7 @@ def preview_checkout_internal( ), "payment_method_id": payment_method_id, "promo_code": promo_code, + "skip_trial": skip_trial, }, headers={ "content-type": "application/json", @@ -534,9 +555,11 @@ async def internal( *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], company_id: str, + credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, new_price_id: str, pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody], + skip_trial: bool, coupon_external_id: typing.Optional[str] = OMIT, payment_method_id: typing.Optional[str] = OMIT, promo_code: typing.Optional[str] = OMIT, @@ -549,12 +572,16 @@ async def internal( company_id : str + credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] + new_plan_id : str new_price_id : str pay_in_advance : typing.Sequence[UpdatePayInAdvanceRequestBody] + skip_trial : bool + coupon_external_id : typing.Optional[str] payment_method_id : typing.Optional[str] @@ -578,6 +605,9 @@ async def internal( ), "company_id": company_id, "coupon_external_id": coupon_external_id, + "credit_bundles": convert_and_respect_annotation_metadata( + object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write" + ), "new_plan_id": new_plan_id, "new_price_id": new_price_id, "pay_in_advance": convert_and_respect_annotation_metadata( @@ -585,6 +615,7 @@ async def internal( ), "payment_method_id": payment_method_id, "promo_code": promo_code, + "skip_trial": skip_trial, }, headers={ "content-type": "application/json", @@ -780,9 +811,11 @@ async def preview_checkout_internal( *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], company_id: str, + credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, new_price_id: str, pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody], + skip_trial: bool, coupon_external_id: typing.Optional[str] = OMIT, payment_method_id: typing.Optional[str] = OMIT, promo_code: typing.Optional[str] = OMIT, @@ -795,12 +828,16 @@ async def preview_checkout_internal( company_id : str + credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] + new_plan_id : str new_price_id : str pay_in_advance : typing.Sequence[UpdatePayInAdvanceRequestBody] + skip_trial : bool + coupon_external_id : typing.Optional[str] payment_method_id : typing.Optional[str] @@ -824,6 +861,9 @@ async def preview_checkout_internal( ), "company_id": company_id, "coupon_external_id": coupon_external_id, + "credit_bundles": convert_and_respect_annotation_metadata( + object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write" + ), "new_plan_id": new_plan_id, "new_price_id": new_price_id, "pay_in_advance": convert_and_respect_annotation_metadata( @@ -831,6 +871,7 @@ async def preview_checkout_internal( ), "payment_method_id": payment_method_id, "promo_code": promo_code, + "skip_trial": skip_trial, }, headers={ "content-type": "application/json", diff --git a/src/schematic/companies/__init__.py b/src/schematic/companies/__init__.py index 3f56636..d74e8a6 100644 --- a/src/schematic/companies/__init__.py +++ b/src/schematic/companies/__init__.py @@ -3,6 +3,10 @@ # isort: skip_file from .types import ( + CountCompaniesForAdvancedFilterParams, + CountCompaniesForAdvancedFilterRequestSortOrderDirection, + CountCompaniesForAdvancedFilterResponse, + CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection, CountCompaniesParams, CountCompaniesResponse, CountEntityKeyDefinitionsParams, @@ -15,15 +19,19 @@ CountEntityTraitDefinitionsResponse, CountEntityTraitDefinitionsResponseParamsEntityType, CountEntityTraitDefinitionsResponseParamsTraitType, + CountPlanTraitsParams, + CountPlanTraitsResponse, CountUsersParams, CountUsersResponse, CreateCompanyResponse, CreateEntityTraitDefinitionRequestBodyEntityType, CreateEntityTraitDefinitionRequestBodyTraitType, + CreatePlanTraitResponse, CreateUserResponse, DeleteCompanyByKeysResponse, DeleteCompanyMembershipResponse, DeleteCompanyResponse, + DeletePlanTraitResponse, DeleteUserByKeysResponse, DeleteUserResponse, GetActiveCompanySubscriptionParams, @@ -36,7 +44,12 @@ GetEntityTraitValuesResponse, GetOrCreateCompanyMembershipResponse, GetOrCreateEntityTraitDefinitionResponse, + GetPlanTraitResponse, GetUserResponse, + ListCompaniesForAdvancedFilterParams, + ListCompaniesForAdvancedFilterRequestSortOrderDirection, + ListCompaniesForAdvancedFilterResponse, + ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection, ListCompaniesParams, ListCompaniesResponse, ListCompanyMembershipsParams, @@ -51,6 +64,8 @@ ListEntityTraitDefinitionsResponse, ListEntityTraitDefinitionsResponseParamsEntityType, ListEntityTraitDefinitionsResponseParamsTraitType, + ListPlanTraitsParams, + ListPlanTraitsResponse, ListUsersParams, ListUsersResponse, LookupCompanyParams, @@ -59,6 +74,7 @@ LookupUserResponse, UpdateEntityTraitDefinitionRequestBodyTraitType, UpdateEntityTraitDefinitionResponse, + UpdatePlanTraitResponse, UpsertCompanyResponse, UpsertCompanyTraitResponse, UpsertUserResponse, @@ -66,6 +82,10 @@ ) __all__ = [ + "CountCompaniesForAdvancedFilterParams", + "CountCompaniesForAdvancedFilterRequestSortOrderDirection", + "CountCompaniesForAdvancedFilterResponse", + "CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection", "CountCompaniesParams", "CountCompaniesResponse", "CountEntityKeyDefinitionsParams", @@ -78,15 +98,19 @@ "CountEntityTraitDefinitionsResponse", "CountEntityTraitDefinitionsResponseParamsEntityType", "CountEntityTraitDefinitionsResponseParamsTraitType", + "CountPlanTraitsParams", + "CountPlanTraitsResponse", "CountUsersParams", "CountUsersResponse", "CreateCompanyResponse", "CreateEntityTraitDefinitionRequestBodyEntityType", "CreateEntityTraitDefinitionRequestBodyTraitType", + "CreatePlanTraitResponse", "CreateUserResponse", "DeleteCompanyByKeysResponse", "DeleteCompanyMembershipResponse", "DeleteCompanyResponse", + "DeletePlanTraitResponse", "DeleteUserByKeysResponse", "DeleteUserResponse", "GetActiveCompanySubscriptionParams", @@ -99,7 +123,12 @@ "GetEntityTraitValuesResponse", "GetOrCreateCompanyMembershipResponse", "GetOrCreateEntityTraitDefinitionResponse", + "GetPlanTraitResponse", "GetUserResponse", + "ListCompaniesForAdvancedFilterParams", + "ListCompaniesForAdvancedFilterRequestSortOrderDirection", + "ListCompaniesForAdvancedFilterResponse", + "ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection", "ListCompaniesParams", "ListCompaniesResponse", "ListCompanyMembershipsParams", @@ -114,6 +143,8 @@ "ListEntityTraitDefinitionsResponse", "ListEntityTraitDefinitionsResponseParamsEntityType", "ListEntityTraitDefinitionsResponseParamsTraitType", + "ListPlanTraitsParams", + "ListPlanTraitsResponse", "ListUsersParams", "ListUsersResponse", "LookupCompanyParams", @@ -122,6 +153,7 @@ "LookupUserResponse", "UpdateEntityTraitDefinitionRequestBodyTraitType", "UpdateEntityTraitDefinitionResponse", + "UpdatePlanTraitResponse", "UpsertCompanyResponse", "UpsertCompanyTraitResponse", "UpsertUserResponse", diff --git a/src/schematic/companies/client.py b/src/schematic/companies/client.py index 87bccc2..226dfdf 100644 --- a/src/schematic/companies/client.py +++ b/src/schematic/companies/client.py @@ -6,12 +6,17 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions from .raw_client import AsyncRawCompaniesClient, RawCompaniesClient +from .types.count_companies_for_advanced_filter_request_sort_order_direction import ( + CountCompaniesForAdvancedFilterRequestSortOrderDirection, +) +from .types.count_companies_for_advanced_filter_response import CountCompaniesForAdvancedFilterResponse from .types.count_companies_response import CountCompaniesResponse from .types.count_entity_key_definitions_request_entity_type import CountEntityKeyDefinitionsRequestEntityType from .types.count_entity_key_definitions_response import CountEntityKeyDefinitionsResponse 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.count_plan_traits_response import CountPlanTraitsResponse from .types.count_users_response import CountUsersResponse from .types.create_company_response import CreateCompanyResponse from .types.create_entity_trait_definition_request_body_entity_type import ( @@ -20,10 +25,12 @@ from .types.create_entity_trait_definition_request_body_trait_type import ( CreateEntityTraitDefinitionRequestBodyTraitType, ) +from .types.create_plan_trait_response import CreatePlanTraitResponse from .types.create_user_response import CreateUserResponse from .types.delete_company_by_keys_response import DeleteCompanyByKeysResponse from .types.delete_company_membership_response import DeleteCompanyMembershipResponse from .types.delete_company_response import DeleteCompanyResponse +from .types.delete_plan_trait_response import DeletePlanTraitResponse from .types.delete_user_by_keys_response import DeleteUserByKeysResponse from .types.delete_user_response import DeleteUserResponse from .types.get_active_company_subscription_response import GetActiveCompanySubscriptionResponse @@ -33,7 +40,12 @@ from .types.get_entity_trait_values_response import GetEntityTraitValuesResponse from .types.get_or_create_company_membership_response import GetOrCreateCompanyMembershipResponse from .types.get_or_create_entity_trait_definition_response import GetOrCreateEntityTraitDefinitionResponse +from .types.get_plan_trait_response import GetPlanTraitResponse from .types.get_user_response import GetUserResponse +from .types.list_companies_for_advanced_filter_request_sort_order_direction import ( + ListCompaniesForAdvancedFilterRequestSortOrderDirection, +) +from .types.list_companies_for_advanced_filter_response import ListCompaniesForAdvancedFilterResponse from .types.list_companies_response import ListCompaniesResponse from .types.list_company_memberships_response import ListCompanyMembershipsResponse from .types.list_entity_key_definitions_request_entity_type import ListEntityKeyDefinitionsRequestEntityType @@ -41,6 +53,7 @@ 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.list_plan_traits_response import ListPlanTraitsResponse from .types.list_users_response import ListUsersResponse from .types.lookup_company_response import LookupCompanyResponse from .types.lookup_user_response import LookupUserResponse @@ -48,6 +61,7 @@ UpdateEntityTraitDefinitionRequestBodyTraitType, ) from .types.update_entity_trait_definition_response import UpdateEntityTraitDefinitionResponse +from .types.update_plan_trait_response import UpdatePlanTraitResponse from .types.upsert_company_response import UpsertCompanyResponse from .types.upsert_company_trait_response import UpsertCompanyTraitResponse from .types.upsert_user_response import UpsertUserResponse @@ -333,6 +347,106 @@ def count_companies( ) return _response.data + def count_companies_for_advanced_filter( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + feature_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_types: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + monetized_subscriptions: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + without_subscription: typing.Optional[bool] = None, + sort_order_column: typing.Optional[str] = None, + sort_order_direction: typing.Optional[CountCompaniesForAdvancedFilterRequestSortOrderDirection] = None, + display_properties: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountCompaniesForAdvancedFilterResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more plan IDs (each ID starts with plan_) + + feature_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more feature IDs (each ID starts with feat_) + + subscription_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + + subscription_types : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription types (paid, free, trial) + + monetized_subscriptions : typing.Optional[bool] + Filter companies that have monetized subscriptions + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + without_subscription : typing.Optional[bool] + Filter out companies that have a subscription + + sort_order_column : typing.Optional[str] + Column to sort by (e.g. name, created_at, last_seen_at) + + sort_order_direction : typing.Optional[CountCompaniesForAdvancedFilterRequestSortOrderDirection] + Direction to sort by (asc or desc) + + display_properties : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Select the display columns to return (e.g. plan, subscription, users, last_seen) + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountCompaniesForAdvancedFilterResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.count_companies_for_advanced_filter() + """ + _response = self._raw_client.count_companies_for_advanced_filter( + ids=ids, + plan_ids=plan_ids, + feature_ids=feature_ids, + subscription_statuses=subscription_statuses, + subscription_types=subscription_types, + monetized_subscriptions=monetized_subscriptions, + q=q, + without_plan=without_plan, + without_subscription=without_subscription, + sort_order_column=sort_order_column, + sort_order_direction=sort_order_direction, + display_properties=display_properties, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + def create_company( self, *, @@ -422,6 +536,106 @@ def delete_company_by_keys( _response = self._raw_client.delete_company_by_keys(keys=keys, request_options=request_options) return _response.data + def list_companies_for_advanced_filter( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + feature_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_types: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + monetized_subscriptions: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + without_subscription: typing.Optional[bool] = None, + sort_order_column: typing.Optional[str] = None, + sort_order_direction: typing.Optional[ListCompaniesForAdvancedFilterRequestSortOrderDirection] = None, + display_properties: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCompaniesForAdvancedFilterResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more plan IDs (each ID starts with plan_) + + feature_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more feature IDs (each ID starts with feat_) + + subscription_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + + subscription_types : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription types (paid, free, trial) + + monetized_subscriptions : typing.Optional[bool] + Filter companies that have monetized subscriptions + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + without_subscription : typing.Optional[bool] + Filter out companies that have a subscription + + sort_order_column : typing.Optional[str] + Column to sort by (e.g. name, created_at, last_seen_at) + + sort_order_direction : typing.Optional[ListCompaniesForAdvancedFilterRequestSortOrderDirection] + Direction to sort by (asc or desc) + + display_properties : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Select the display columns to return (e.g. plan, subscription, users, last_seen) + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCompaniesForAdvancedFilterResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.list_companies_for_advanced_filter() + """ + _response = self._raw_client.list_companies_for_advanced_filter( + ids=ids, + plan_ids=plan_ids, + feature_ids=feature_ids, + subscription_statuses=subscription_statuses, + subscription_types=subscription_types, + monetized_subscriptions=monetized_subscriptions, + q=q, + without_plan=without_plan, + without_subscription=without_subscription, + sort_order_column=sort_order_column, + sort_order_direction=sort_order_direction, + display_properties=display_properties, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + def lookup_company( self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None ) -> LookupCompanyResponse: @@ -1088,84 +1302,27 @@ def get_entity_trait_values( ) return _response.data - def upsert_user_trait( - self, - *, - keys: typing.Dict[str, str], - trait: str, - incr: typing.Optional[int] = OMIT, - set_: typing.Optional[str] = OMIT, - update_only: typing.Optional[bool] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> UpsertUserTraitResponse: - """ - Parameters - ---------- - keys : typing.Dict[str, str] - Key/value pairs to identify a company or user - - trait : str - Name of the trait to update - - incr : typing.Optional[int] - Amount to increment the trait by (positive or negative) - - set_ : typing.Optional[str] - Value to set the trait to - - update_only : typing.Optional[bool] - Unless this is set, the company or user will be created if it does not already exist - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - UpsertUserTraitResponse - OK - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.companies.upsert_user_trait( - keys={"key": "value"}, - trait="trait", - ) - """ - _response = self._raw_client.upsert_user_trait( - keys=keys, trait=trait, incr=incr, set_=set_, update_only=update_only, request_options=request_options - ) - return _response.data - - def list_users( + def list_plan_traits( self, *, - company_id: typing.Optional[str] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_id: typing.Optional[str] = None, - q: typing.Optional[str] = None, + trait_id: typing.Optional[str] = None, + trait_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> ListUsersResponse: + ) -> ListPlanTraitsResponse: """ Parameters ---------- - company_id : typing.Optional[str] - Filter users by company ID (starts with comp_) - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - Filter users by multiple user IDs (starts with user_) plan_id : typing.Optional[str] - Filter users by plan ID (starts with plan_) - q : typing.Optional[str] - Search for users by name, keys or string traits + trait_id : typing.Optional[str] + + trait_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] limit : typing.Optional[int] Page limit (default 100) @@ -1178,7 +1335,7 @@ def list_users( Returns ------- - ListUsersResponse + ListPlanTraitsResponse OK Examples @@ -1188,71 +1345,38 @@ def list_users( client = Schematic( api_key="YOUR_API_KEY", ) - client.companies.list_users() + client.companies.list_plan_traits() """ - _response = self._raw_client.list_users( - company_id=company_id, + _response = self._raw_client.list_plan_traits( ids=ids, plan_id=plan_id, - q=q, + trait_id=trait_id, + trait_ids=trait_ids, limit=limit, offset=offset, request_options=request_options, ) return _response.data - def upsert_user( - self, - *, - keys: typing.Dict[str, str], - companies: typing.Optional[typing.Sequence[typing.Dict[str, str]]] = OMIT, - company: typing.Optional[typing.Dict[str, str]] = OMIT, - company_id: typing.Optional[str] = OMIT, - company_ids: typing.Optional[typing.Sequence[str]] = OMIT, - id: typing.Optional[str] = OMIT, - last_seen_at: typing.Optional[dt.datetime] = OMIT, - name: typing.Optional[str] = OMIT, - traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - update_only: typing.Optional[bool] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> UpsertUserResponse: + def create_plan_trait( + self, *, plan_id: str, trait_id: str, trait_value: str, request_options: typing.Optional[RequestOptions] = None + ) -> CreatePlanTraitResponse: """ Parameters ---------- - keys : typing.Dict[str, str] - See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information - - companies : typing.Optional[typing.Sequence[typing.Dict[str, str]]] - Optionally specify companies using array of key/value pairs - - company : typing.Optional[typing.Dict[str, str]] - Add user to this company. Takes priority over companies. For exhaustive list of companies, use companies - - company_id : typing.Optional[str] - Add user to this company. Takes priority over company_ids. For exhaustive list of companies, use company_ids - - company_ids : typing.Optional[typing.Sequence[str]] - Optionally specify companies using Schematic company ID - - id : typing.Optional[str] - If you know the Schematic ID, you can use that here instead of keys - - last_seen_at : typing.Optional[dt.datetime] + plan_id : str - name : typing.Optional[str] - - traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - A map of trait names to trait values + trait_id : str - update_only : typing.Optional[bool] + trait_value : str request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - UpsertUserResponse - OK + CreatePlanTraitResponse + Created Examples -------- @@ -1261,38 +1385,32 @@ def upsert_user( client = Schematic( api_key="YOUR_API_KEY", ) - client.companies.upsert_user( - keys={"key": "value"}, + client.companies.create_plan_trait( + plan_id="plan_id", + trait_id="trait_id", + trait_value="trait_value", ) """ - _response = self._raw_client.upsert_user( - keys=keys, - companies=companies, - company=company, - company_id=company_id, - company_ids=company_ids, - id=id, - last_seen_at=last_seen_at, - name=name, - traits=traits, - update_only=update_only, - request_options=request_options, + _response = self._raw_client.create_plan_trait( + plan_id=plan_id, trait_id=trait_id, trait_value=trait_value, request_options=request_options ) return _response.data - def get_user(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetUserResponse: + def get_plan_trait( + self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetPlanTraitResponse: """ Parameters ---------- - user_id : str - user_id + plan_trait_id : str + plan_trait_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - GetUserResponse + GetPlanTraitResponse OK Examples @@ -1302,16 +1420,368 @@ def get_user(self, user_id: str, *, request_options: typing.Optional[RequestOpti client = Schematic( api_key="YOUR_API_KEY", ) - client.companies.get_user( - user_id="user_id", + client.companies.get_plan_trait( + plan_trait_id="plan_trait_id", ) """ - _response = self._raw_client.get_user(user_id, request_options=request_options) + _response = self._raw_client.get_plan_trait(plan_trait_id, request_options=request_options) return _response.data - def delete_user( - self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> DeleteUserResponse: + def update_plan_trait( + self, + plan_trait_id: str, + *, + plan_id: str, + trait_value: str, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdatePlanTraitResponse: + """ + Parameters + ---------- + plan_trait_id : str + plan_trait_id + + plan_id : str + + trait_value : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdatePlanTraitResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.update_plan_trait( + plan_trait_id="plan_trait_id", + plan_id="plan_id", + trait_value="trait_value", + ) + """ + _response = self._raw_client.update_plan_trait( + plan_trait_id, plan_id=plan_id, trait_value=trait_value, request_options=request_options + ) + return _response.data + + def delete_plan_trait( + self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeletePlanTraitResponse: + """ + Parameters + ---------- + plan_trait_id : str + plan_trait_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeletePlanTraitResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.delete_plan_trait( + plan_trait_id="plan_trait_id", + ) + """ + _response = self._raw_client.delete_plan_trait(plan_trait_id, request_options=request_options) + return _response.data + + def count_plan_traits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + trait_id: typing.Optional[str] = None, + trait_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountPlanTraitsResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + plan_id : typing.Optional[str] + + trait_id : typing.Optional[str] + + trait_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountPlanTraitsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.count_plan_traits() + """ + _response = self._raw_client.count_plan_traits( + ids=ids, + plan_id=plan_id, + trait_id=trait_id, + trait_ids=trait_ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + def upsert_user_trait( + self, + *, + keys: typing.Dict[str, str], + trait: str, + incr: typing.Optional[int] = OMIT, + set_: typing.Optional[str] = OMIT, + update_only: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpsertUserTraitResponse: + """ + Parameters + ---------- + keys : typing.Dict[str, str] + Key/value pairs to identify a company or user + + trait : str + Name of the trait to update + + incr : typing.Optional[int] + Amount to increment the trait by (positive or negative) + + set_ : typing.Optional[str] + Value to set the trait to + + update_only : typing.Optional[bool] + Unless this is set, the company or user will be created if it does not already exist + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpsertUserTraitResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.upsert_user_trait( + keys={"key": "value"}, + trait="trait", + ) + """ + _response = self._raw_client.upsert_user_trait( + keys=keys, trait=trait, incr=incr, set_=set_, update_only=update_only, request_options=request_options + ) + return _response.data + + def list_users( + self, + *, + company_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + q: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListUsersResponse: + """ + Parameters + ---------- + company_id : typing.Optional[str] + Filter users by company ID (starts with comp_) + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter users by multiple user IDs (starts with user_) + + plan_id : typing.Optional[str] + Filter users by plan ID (starts with plan_) + + q : typing.Optional[str] + Search for users by name, keys or string traits + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListUsersResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.list_users() + """ + _response = self._raw_client.list_users( + company_id=company_id, + ids=ids, + plan_id=plan_id, + q=q, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + def upsert_user( + self, + *, + keys: typing.Dict[str, str], + companies: typing.Optional[typing.Sequence[typing.Dict[str, str]]] = OMIT, + company: typing.Optional[typing.Dict[str, str]] = OMIT, + company_id: typing.Optional[str] = OMIT, + company_ids: typing.Optional[typing.Sequence[str]] = OMIT, + id: typing.Optional[str] = OMIT, + last_seen_at: typing.Optional[dt.datetime] = OMIT, + name: typing.Optional[str] = OMIT, + traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + update_only: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpsertUserResponse: + """ + Parameters + ---------- + keys : typing.Dict[str, str] + See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + + companies : typing.Optional[typing.Sequence[typing.Dict[str, str]]] + Optionally specify companies using array of key/value pairs + + company : typing.Optional[typing.Dict[str, str]] + Add user to this company. Takes priority over companies. For exhaustive list of companies, use companies + + company_id : typing.Optional[str] + Add user to this company. Takes priority over company_ids. For exhaustive list of companies, use company_ids + + company_ids : typing.Optional[typing.Sequence[str]] + Optionally specify companies using Schematic company ID + + id : typing.Optional[str] + If you know the Schematic ID, you can use that here instead of keys + + last_seen_at : typing.Optional[dt.datetime] + + name : typing.Optional[str] + + traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + A map of trait names to trait values + + update_only : typing.Optional[bool] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpsertUserResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.upsert_user( + keys={"key": "value"}, + ) + """ + _response = self._raw_client.upsert_user( + keys=keys, + companies=companies, + company=company, + company_id=company_id, + company_ids=company_ids, + id=id, + last_seen_at=last_seen_at, + name=name, + traits=traits, + update_only=update_only, + request_options=request_options, + ) + return _response.data + + def get_user(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetUserResponse: + """ + Parameters + ---------- + user_id : str + user_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetUserResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.get_user( + user_id="user_id", + ) + """ + _response = self._raw_client.get_user(user_id, request_options=request_options) + return _response.data + + def delete_user( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeleteUserResponse: """ Parameters ---------- @@ -1857,6 +2327,114 @@ async def main() -> None: ) return _response.data + async def count_companies_for_advanced_filter( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + feature_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_types: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + monetized_subscriptions: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + without_subscription: typing.Optional[bool] = None, + sort_order_column: typing.Optional[str] = None, + sort_order_direction: typing.Optional[CountCompaniesForAdvancedFilterRequestSortOrderDirection] = None, + display_properties: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountCompaniesForAdvancedFilterResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more plan IDs (each ID starts with plan_) + + feature_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more feature IDs (each ID starts with feat_) + + subscription_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + + subscription_types : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription types (paid, free, trial) + + monetized_subscriptions : typing.Optional[bool] + Filter companies that have monetized subscriptions + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + without_subscription : typing.Optional[bool] + Filter out companies that have a subscription + + sort_order_column : typing.Optional[str] + Column to sort by (e.g. name, created_at, last_seen_at) + + sort_order_direction : typing.Optional[CountCompaniesForAdvancedFilterRequestSortOrderDirection] + Direction to sort by (asc or desc) + + display_properties : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Select the display columns to return (e.g. plan, subscription, users, last_seen) + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountCompaniesForAdvancedFilterResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.count_companies_for_advanced_filter() + + + asyncio.run(main()) + """ + _response = await self._raw_client.count_companies_for_advanced_filter( + ids=ids, + plan_ids=plan_ids, + feature_ids=feature_ids, + subscription_statuses=subscription_statuses, + subscription_types=subscription_types, + monetized_subscriptions=monetized_subscriptions, + q=q, + without_plan=without_plan, + without_subscription=without_subscription, + sort_order_column=sort_order_column, + sort_order_direction=sort_order_direction, + display_properties=display_properties, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + async def create_company( self, *, @@ -1924,20 +2502,114 @@ async def main() -> None: ) return _response.data - async def delete_company_by_keys( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None - ) -> DeleteCompanyByKeysResponse: - """ - Parameters - ---------- - keys : typing.Dict[str, str] + async def delete_company_by_keys( + self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + ) -> DeleteCompanyByKeysResponse: + """ + Parameters + ---------- + keys : typing.Dict[str, str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteCompanyByKeysResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.delete_company_by_keys( + keys={"key": "value"}, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete_company_by_keys(keys=keys, request_options=request_options) + return _response.data + + async def list_companies_for_advanced_filter( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + feature_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_types: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + monetized_subscriptions: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + without_subscription: typing.Optional[bool] = None, + sort_order_column: typing.Optional[str] = None, + sort_order_direction: typing.Optional[ListCompaniesForAdvancedFilterRequestSortOrderDirection] = None, + display_properties: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCompaniesForAdvancedFilterResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more plan IDs (each ID starts with plan_) + + feature_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more feature IDs (each ID starts with feat_) + + subscription_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + + subscription_types : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription types (paid, free, trial) + + monetized_subscriptions : typing.Optional[bool] + Filter companies that have monetized subscriptions + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + without_subscription : typing.Optional[bool] + Filter out companies that have a subscription + + sort_order_column : typing.Optional[str] + Column to sort by (e.g. name, created_at, last_seen_at) + + sort_order_direction : typing.Optional[ListCompaniesForAdvancedFilterRequestSortOrderDirection] + Direction to sort by (asc or desc) + + display_properties : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Select the display columns to return (e.g. plan, subscription, users, last_seen) + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - DeleteCompanyByKeysResponse + ListCompaniesForAdvancedFilterResponse OK Examples @@ -1952,14 +2624,28 @@ async def delete_company_by_keys( async def main() -> None: - await client.companies.delete_company_by_keys( - keys={"key": "value"}, - ) + await client.companies.list_companies_for_advanced_filter() asyncio.run(main()) """ - _response = await self._raw_client.delete_company_by_keys(keys=keys, request_options=request_options) + _response = await self._raw_client.list_companies_for_advanced_filter( + ids=ids, + plan_ids=plan_ids, + feature_ids=feature_ids, + subscription_statuses=subscription_statuses, + subscription_types=subscription_types, + monetized_subscriptions=monetized_subscriptions, + q=q, + without_plan=without_plan, + without_subscription=without_subscription, + sort_order_column=sort_order_column, + sort_order_direction=sort_order_direction, + display_properties=display_properties, + limit=limit, + offset=offset, + request_options=request_options, + ) return _response.data async def lookup_company( @@ -2750,6 +3436,310 @@ async def main() -> None: ) return _response.data + async def list_plan_traits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + trait_id: typing.Optional[str] = None, + trait_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListPlanTraitsResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + plan_id : typing.Optional[str] + + trait_id : typing.Optional[str] + + trait_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListPlanTraitsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.list_plan_traits() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_plan_traits( + ids=ids, + plan_id=plan_id, + trait_id=trait_id, + trait_ids=trait_ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + async def create_plan_trait( + self, *, plan_id: str, trait_id: str, trait_value: str, request_options: typing.Optional[RequestOptions] = None + ) -> CreatePlanTraitResponse: + """ + Parameters + ---------- + plan_id : str + + trait_id : str + + trait_value : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreatePlanTraitResponse + Created + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.create_plan_trait( + plan_id="plan_id", + trait_id="trait_id", + trait_value="trait_value", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.create_plan_trait( + plan_id=plan_id, trait_id=trait_id, trait_value=trait_value, request_options=request_options + ) + return _response.data + + async def get_plan_trait( + self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetPlanTraitResponse: + """ + Parameters + ---------- + plan_trait_id : str + plan_trait_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetPlanTraitResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.get_plan_trait( + plan_trait_id="plan_trait_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_plan_trait(plan_trait_id, request_options=request_options) + return _response.data + + async def update_plan_trait( + self, + plan_trait_id: str, + *, + plan_id: str, + trait_value: str, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdatePlanTraitResponse: + """ + Parameters + ---------- + plan_trait_id : str + plan_trait_id + + plan_id : str + + trait_value : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdatePlanTraitResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.update_plan_trait( + plan_trait_id="plan_trait_id", + plan_id="plan_id", + trait_value="trait_value", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update_plan_trait( + plan_trait_id, plan_id=plan_id, trait_value=trait_value, request_options=request_options + ) + return _response.data + + async def delete_plan_trait( + self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeletePlanTraitResponse: + """ + Parameters + ---------- + plan_trait_id : str + plan_trait_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeletePlanTraitResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.delete_plan_trait( + plan_trait_id="plan_trait_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete_plan_trait(plan_trait_id, request_options=request_options) + return _response.data + + async def count_plan_traits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + trait_id: typing.Optional[str] = None, + trait_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountPlanTraitsResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + plan_id : typing.Optional[str] + + trait_id : typing.Optional[str] + + trait_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountPlanTraitsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.count_plan_traits() + + + asyncio.run(main()) + """ + _response = await self._raw_client.count_plan_traits( + ids=ids, + plan_id=plan_id, + trait_id=trait_id, + trait_ids=trait_ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + async def upsert_user_trait( self, *, diff --git a/src/schematic/companies/raw_client.py b/src/schematic/companies/raw_client.py index e2445b5..58c83b9 100644 --- a/src/schematic/companies/raw_client.py +++ b/src/schematic/companies/raw_client.py @@ -16,12 +16,17 @@ from ..errors.not_found_error import NotFoundError from ..errors.unauthorized_error import UnauthorizedError from ..types.api_error import ApiError as types_api_error_ApiError +from .types.count_companies_for_advanced_filter_request_sort_order_direction import ( + CountCompaniesForAdvancedFilterRequestSortOrderDirection, +) +from .types.count_companies_for_advanced_filter_response import CountCompaniesForAdvancedFilterResponse from .types.count_companies_response import CountCompaniesResponse from .types.count_entity_key_definitions_request_entity_type import CountEntityKeyDefinitionsRequestEntityType from .types.count_entity_key_definitions_response import CountEntityKeyDefinitionsResponse 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.count_plan_traits_response import CountPlanTraitsResponse from .types.count_users_response import CountUsersResponse from .types.create_company_response import CreateCompanyResponse from .types.create_entity_trait_definition_request_body_entity_type import ( @@ -30,10 +35,12 @@ from .types.create_entity_trait_definition_request_body_trait_type import ( CreateEntityTraitDefinitionRequestBodyTraitType, ) +from .types.create_plan_trait_response import CreatePlanTraitResponse from .types.create_user_response import CreateUserResponse from .types.delete_company_by_keys_response import DeleteCompanyByKeysResponse from .types.delete_company_membership_response import DeleteCompanyMembershipResponse from .types.delete_company_response import DeleteCompanyResponse +from .types.delete_plan_trait_response import DeletePlanTraitResponse from .types.delete_user_by_keys_response import DeleteUserByKeysResponse from .types.delete_user_response import DeleteUserResponse from .types.get_active_company_subscription_response import GetActiveCompanySubscriptionResponse @@ -43,7 +50,12 @@ from .types.get_entity_trait_values_response import GetEntityTraitValuesResponse from .types.get_or_create_company_membership_response import GetOrCreateCompanyMembershipResponse from .types.get_or_create_entity_trait_definition_response import GetOrCreateEntityTraitDefinitionResponse +from .types.get_plan_trait_response import GetPlanTraitResponse from .types.get_user_response import GetUserResponse +from .types.list_companies_for_advanced_filter_request_sort_order_direction import ( + ListCompaniesForAdvancedFilterRequestSortOrderDirection, +) +from .types.list_companies_for_advanced_filter_response import ListCompaniesForAdvancedFilterResponse from .types.list_companies_response import ListCompaniesResponse from .types.list_company_memberships_response import ListCompanyMembershipsResponse from .types.list_entity_key_definitions_request_entity_type import ListEntityKeyDefinitionsRequestEntityType @@ -51,6 +63,7 @@ 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.list_plan_traits_response import ListPlanTraitsResponse from .types.list_users_response import ListUsersResponse from .types.lookup_company_response import LookupCompanyResponse from .types.lookup_user_response import LookupUserResponse @@ -58,6 +71,7 @@ UpdateEntityTraitDefinitionRequestBodyTraitType, ) from .types.update_entity_trait_definition_response import UpdateEntityTraitDefinitionResponse +from .types.update_plan_trait_response import UpdatePlanTraitResponse from .types.upsert_company_response import UpsertCompanyResponse from .types.upsert_company_trait_response import UpsertCompanyTraitResponse from .types.upsert_user_response import UpsertUserResponse @@ -654,6 +668,173 @@ def count_companies( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def count_companies_for_advanced_filter( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + feature_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_types: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + monetized_subscriptions: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + without_subscription: typing.Optional[bool] = None, + sort_order_column: typing.Optional[str] = None, + sort_order_direction: typing.Optional[CountCompaniesForAdvancedFilterRequestSortOrderDirection] = None, + display_properties: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CountCompaniesForAdvancedFilterResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more plan IDs (each ID starts with plan_) + + feature_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more feature IDs (each ID starts with feat_) + + subscription_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + + subscription_types : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription types (paid, free, trial) + + monetized_subscriptions : typing.Optional[bool] + Filter companies that have monetized subscriptions + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + without_subscription : typing.Optional[bool] + Filter out companies that have a subscription + + sort_order_column : typing.Optional[str] + Column to sort by (e.g. name, created_at, last_seen_at) + + sort_order_direction : typing.Optional[CountCompaniesForAdvancedFilterRequestSortOrderDirection] + Direction to sort by (asc or desc) + + display_properties : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Select the display columns to return (e.g. plan, subscription, users, last_seen) + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CountCompaniesForAdvancedFilterResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "companies/count2", + method="GET", + params={ + "ids": ids, + "plan_ids": plan_ids, + "feature_ids": feature_ids, + "subscription_statuses": subscription_statuses, + "subscription_types": subscription_types, + "monetized_subscriptions": monetized_subscriptions, + "q": q, + "without_plan": without_plan, + "without_subscription": without_subscription, + "sort_order_column": sort_order_column, + "sort_order_direction": sort_order_direction, + "display_properties": display_properties, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountCompaniesForAdvancedFilterResponse, + parse_obj_as( + type_=CountCompaniesForAdvancedFilterResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + def create_company( self, *, @@ -884,6 +1065,173 @@ def delete_company_by_keys( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def list_companies_for_advanced_filter( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + feature_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_types: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + monetized_subscriptions: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + without_subscription: typing.Optional[bool] = None, + sort_order_column: typing.Optional[str] = None, + sort_order_direction: typing.Optional[ListCompaniesForAdvancedFilterRequestSortOrderDirection] = None, + display_properties: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListCompaniesForAdvancedFilterResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more plan IDs (each ID starts with plan_) + + feature_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more feature IDs (each ID starts with feat_) + + subscription_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + + subscription_types : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription types (paid, free, trial) + + monetized_subscriptions : typing.Optional[bool] + Filter companies that have monetized subscriptions + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + without_subscription : typing.Optional[bool] + Filter out companies that have a subscription + + sort_order_column : typing.Optional[str] + Column to sort by (e.g. name, created_at, last_seen_at) + + sort_order_direction : typing.Optional[ListCompaniesForAdvancedFilterRequestSortOrderDirection] + Direction to sort by (asc or desc) + + display_properties : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Select the display columns to return (e.g. plan, subscription, users, last_seen) + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListCompaniesForAdvancedFilterResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "companies/list2", + method="GET", + params={ + "ids": ids, + "plan_ids": plan_ids, + "feature_ids": feature_ids, + "subscription_statuses": subscription_statuses, + "subscription_types": subscription_types, + "monetized_subscriptions": monetized_subscriptions, + "q": q, + "without_plan": without_plan, + "without_subscription": without_subscription, + "sort_order_column": sort_order_column, + "sort_order_direction": sort_order_direction, + "display_properties": display_properties, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCompaniesForAdvancedFilterResponse, + parse_obj_as( + type_=ListCompaniesForAdvancedFilterResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + def lookup_company( self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[LookupCompanyResponse]: @@ -2558,64 +2906,61 @@ def get_entity_trait_values( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def upsert_user_trait( + def list_plan_traits( self, *, - keys: typing.Dict[str, str], - trait: str, - incr: typing.Optional[int] = OMIT, - set_: typing.Optional[str] = OMIT, - update_only: typing.Optional[bool] = OMIT, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + trait_id: typing.Optional[str] = None, + trait_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[UpsertUserTraitResponse]: + ) -> HttpResponse[ListPlanTraitsResponse]: """ Parameters ---------- - keys : typing.Dict[str, str] - Key/value pairs to identify a company or user + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - trait : str - Name of the trait to update + plan_id : typing.Optional[str] - incr : typing.Optional[int] - Amount to increment the trait by (positive or negative) + trait_id : typing.Optional[str] - set_ : typing.Optional[str] - Value to set the trait to + trait_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - update_only : typing.Optional[bool] - Unless this is set, the company or user will be created if it does not already exist + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[UpsertUserTraitResponse] + HttpResponse[ListPlanTraitsResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "user-traits", - method="POST", - json={ - "incr": incr, - "keys": keys, - "set": set_, - "trait": trait, - "update_only": update_only, - }, - headers={ - "content-type": "application/json", + "plan-traits", + method="GET", + params={ + "ids": ids, + "plan_id": plan_id, + "trait_id": trait_id, + "trait_ids": trait_ids, + "limit": limit, + "offset": offset, }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpsertUserTraitResponse, + ListPlanTraitsResponse, parse_obj_as( - type_=UpsertUserTraitResponse, # type: ignore + type_=ListPlanTraitsResponse, # type: ignore object_=_response.json(), ), ) @@ -2684,65 +3029,46 @@ def upsert_user_trait( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def list_users( - self, - *, - company_id: typing.Optional[str] = None, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - q: typing.Optional[str] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ListUsersResponse]: + def create_plan_trait( + self, *, plan_id: str, trait_id: str, trait_value: str, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[CreatePlanTraitResponse]: """ Parameters ---------- - company_id : typing.Optional[str] - Filter users by company ID (starts with comp_) - - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - Filter users by multiple user IDs (starts with user_) - - plan_id : typing.Optional[str] - Filter users by plan ID (starts with plan_) + plan_id : str - q : typing.Optional[str] - Search for users by name, keys or string traits - - limit : typing.Optional[int] - Page limit (default 100) + trait_id : str - offset : typing.Optional[int] - Page offset (default 0) + trait_value : str request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[ListUsersResponse] - OK + HttpResponse[CreatePlanTraitResponse] + Created """ _response = self._client_wrapper.httpx_client.request( - "users", - method="GET", - params={ - "company_id": company_id, - "ids": ids, + "plan-traits", + method="POST", + json={ "plan_id": plan_id, - "q": q, - "limit": limit, - "offset": offset, + "trait_id": trait_id, + "trait_value": trait_value, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListUsersResponse, + CreatePlanTraitResponse, parse_obj_as( - type_=ListUsersResponse, # type: ignore + type_=CreatePlanTraitResponse, # type: ignore object_=_response.json(), ), ) @@ -2811,101 +3137,38 @@ def list_users( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def upsert_user( - self, - *, - keys: typing.Dict[str, str], - companies: typing.Optional[typing.Sequence[typing.Dict[str, str]]] = OMIT, - company: typing.Optional[typing.Dict[str, str]] = OMIT, - company_id: typing.Optional[str] = OMIT, - company_ids: typing.Optional[typing.Sequence[str]] = OMIT, - id: typing.Optional[str] = OMIT, - last_seen_at: typing.Optional[dt.datetime] = OMIT, - name: typing.Optional[str] = OMIT, - traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - update_only: typing.Optional[bool] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[UpsertUserResponse]: + def get_plan_trait( + self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetPlanTraitResponse]: """ Parameters ---------- - keys : typing.Dict[str, str] - See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information - - companies : typing.Optional[typing.Sequence[typing.Dict[str, str]]] - Optionally specify companies using array of key/value pairs - - company : typing.Optional[typing.Dict[str, str]] - Add user to this company. Takes priority over companies. For exhaustive list of companies, use companies - - company_id : typing.Optional[str] - Add user to this company. Takes priority over company_ids. For exhaustive list of companies, use company_ids - - company_ids : typing.Optional[typing.Sequence[str]] - Optionally specify companies using Schematic company ID - - id : typing.Optional[str] - If you know the Schematic ID, you can use that here instead of keys - - last_seen_at : typing.Optional[dt.datetime] - - name : typing.Optional[str] - - traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - A map of trait names to trait values - - update_only : typing.Optional[bool] + plan_trait_id : str + plan_trait_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[UpsertUserResponse] + HttpResponse[GetPlanTraitResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "users", - method="POST", - json={ - "companies": companies, - "company": company, - "company_id": company_id, - "company_ids": company_ids, - "id": id, - "keys": keys, - "last_seen_at": last_seen_at, - "name": name, - "traits": traits, - "update_only": update_only, - }, - headers={ - "content-type": "application/json", - }, + f"plan-traits/{jsonable_encoder(plan_trait_id)}", + method="GET", request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpsertUserResponse, + GetPlanTraitResponse, parse_obj_as( - type_=UpsertUserResponse, # type: ignore + type_=GetPlanTraitResponse, # type: ignore object_=_response.json(), ), ) return HttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( headers=dict(_response.headers), @@ -2959,38 +3222,66 @@ def upsert_user( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_user( - self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[GetUserResponse]: + def update_plan_trait( + self, + plan_trait_id: str, + *, + plan_id: str, + trait_value: str, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[UpdatePlanTraitResponse]: """ Parameters ---------- - user_id : str - user_id + plan_trait_id : str + plan_trait_id + + plan_id : str + + trait_value : str request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[GetUserResponse] + HttpResponse[UpdatePlanTraitResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"users/{jsonable_encoder(user_id)}", - method="GET", + f"plan-traits/{jsonable_encoder(plan_trait_id)}", + method="PUT", + json={ + "plan_id": plan_id, + "trait_value": trait_value, + }, + headers={ + "content-type": "application/json", + }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetUserResponse, + UpdatePlanTraitResponse, parse_obj_as( - type_=GetUserResponse, # type: ignore + type_=UpdatePlanTraitResponse, # type: ignore object_=_response.json(), ), ) return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( headers=dict(_response.headers), @@ -3044,34 +3335,34 @@ def get_user( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def delete_user( - self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[DeleteUserResponse]: + def delete_plan_trait( + self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeletePlanTraitResponse]: """ Parameters ---------- - user_id : str - user_id + plan_trait_id : str + plan_trait_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[DeleteUserResponse] + HttpResponse[DeletePlanTraitResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"users/{jsonable_encoder(user_id)}", + f"plan-traits/{jsonable_encoder(plan_trait_id)}", method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeleteUserResponse, + DeletePlanTraitResponse, parse_obj_as( - type_=DeleteUserResponse, # type: ignore + type_=DeletePlanTraitResponse, # type: ignore object_=_response.json(), ), ) @@ -3140,31 +3431,27 @@ def delete_user( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def count_users( + def count_plan_traits( self, *, - company_id: typing.Optional[str] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_id: typing.Optional[str] = None, - q: typing.Optional[str] = None, + trait_id: typing.Optional[str] = None, + trait_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CountUsersResponse]: + ) -> HttpResponse[CountPlanTraitsResponse]: """ Parameters ---------- - company_id : typing.Optional[str] - Filter users by company ID (starts with comp_) - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - Filter users by multiple user IDs (starts with user_) plan_id : typing.Optional[str] - Filter users by plan ID (starts with plan_) - q : typing.Optional[str] - Search for users by name, keys or string traits + trait_id : typing.Optional[str] + + trait_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] limit : typing.Optional[int] Page limit (default 100) @@ -3177,17 +3464,17 @@ def count_users( Returns ------- - HttpResponse[CountUsersResponse] + HttpResponse[CountPlanTraitsResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "users/count", + "plan-traits/count", method="GET", params={ - "company_id": company_id, "ids": ids, "plan_id": plan_id, - "q": q, + "trait_id": trait_id, + "trait_ids": trait_ids, "limit": limit, "offset": offset, }, @@ -3196,9 +3483,9 @@ def count_users( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountUsersResponse, + CountPlanTraitsResponse, parse_obj_as( - type_=CountUsersResponse, # type: ignore + type_=CountPlanTraitsResponse, # type: ignore object_=_response.json(), ), ) @@ -3267,72 +3554,50 @@ def count_users( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def create_user( + def upsert_user_trait( self, *, keys: typing.Dict[str, str], - companies: typing.Optional[typing.Sequence[typing.Dict[str, str]]] = OMIT, - company: typing.Optional[typing.Dict[str, str]] = OMIT, - company_id: typing.Optional[str] = OMIT, - company_ids: typing.Optional[typing.Sequence[str]] = OMIT, - id: typing.Optional[str] = OMIT, - last_seen_at: typing.Optional[dt.datetime] = OMIT, - name: typing.Optional[str] = OMIT, - traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + trait: str, + incr: typing.Optional[int] = OMIT, + set_: typing.Optional[str] = OMIT, update_only: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CreateUserResponse]: + ) -> HttpResponse[UpsertUserTraitResponse]: """ Parameters ---------- keys : typing.Dict[str, str] - See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + Key/value pairs to identify a company or user - companies : typing.Optional[typing.Sequence[typing.Dict[str, str]]] - Optionally specify companies using array of key/value pairs + trait : str + Name of the trait to update - company : typing.Optional[typing.Dict[str, str]] - Add user to this company. Takes priority over companies. For exhaustive list of companies, use companies + incr : typing.Optional[int] + Amount to increment the trait by (positive or negative) - company_id : typing.Optional[str] - Add user to this company. Takes priority over company_ids. For exhaustive list of companies, use company_ids - - company_ids : typing.Optional[typing.Sequence[str]] - Optionally specify companies using Schematic company ID - - id : typing.Optional[str] - If you know the Schematic ID, you can use that here instead of keys - - last_seen_at : typing.Optional[dt.datetime] - - name : typing.Optional[str] - - traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - A map of trait names to trait values + set_ : typing.Optional[str] + Value to set the trait to update_only : typing.Optional[bool] + Unless this is set, the company or user will be created if it does not already exist request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CreateUserResponse] - Created + HttpResponse[UpsertUserTraitResponse] + OK """ _response = self._client_wrapper.httpx_client.request( - "users/create", + "user-traits", method="POST", json={ - "companies": companies, - "company": company, - "company_id": company_id, - "company_ids": company_ids, - "id": id, + "incr": incr, "keys": keys, - "last_seen_at": last_seen_at, - "name": name, - "traits": traits, + "set": set_, + "trait": trait, "update_only": update_only, }, headers={ @@ -3344,13 +3609,1522 @@ def create_user( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CreateUserResponse, + UpsertUserTraitResponse, + parse_obj_as( + type_=UpsertUserTraitResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def list_users( + self, + *, + company_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + q: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListUsersResponse]: + """ + Parameters + ---------- + company_id : typing.Optional[str] + Filter users by company ID (starts with comp_) + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter users by multiple user IDs (starts with user_) + + plan_id : typing.Optional[str] + Filter users by plan ID (starts with plan_) + + q : typing.Optional[str] + Search for users by name, keys or string traits + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListUsersResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "users", + method="GET", + params={ + "company_id": company_id, + "ids": ids, + "plan_id": plan_id, + "q": q, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListUsersResponse, + parse_obj_as( + type_=ListUsersResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def upsert_user( + self, + *, + keys: typing.Dict[str, str], + companies: typing.Optional[typing.Sequence[typing.Dict[str, str]]] = OMIT, + company: typing.Optional[typing.Dict[str, str]] = OMIT, + company_id: typing.Optional[str] = OMIT, + company_ids: typing.Optional[typing.Sequence[str]] = OMIT, + id: typing.Optional[str] = OMIT, + last_seen_at: typing.Optional[dt.datetime] = OMIT, + name: typing.Optional[str] = OMIT, + traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + update_only: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[UpsertUserResponse]: + """ + Parameters + ---------- + keys : typing.Dict[str, str] + See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + + companies : typing.Optional[typing.Sequence[typing.Dict[str, str]]] + Optionally specify companies using array of key/value pairs + + company : typing.Optional[typing.Dict[str, str]] + Add user to this company. Takes priority over companies. For exhaustive list of companies, use companies + + company_id : typing.Optional[str] + Add user to this company. Takes priority over company_ids. For exhaustive list of companies, use company_ids + + company_ids : typing.Optional[typing.Sequence[str]] + Optionally specify companies using Schematic company ID + + id : typing.Optional[str] + If you know the Schematic ID, you can use that here instead of keys + + last_seen_at : typing.Optional[dt.datetime] + + name : typing.Optional[str] + + traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + A map of trait names to trait values + + update_only : typing.Optional[bool] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[UpsertUserResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "users", + method="POST", + json={ + "companies": companies, + "company": company, + "company_id": company_id, + "company_ids": company_ids, + "id": id, + "keys": keys, + "last_seen_at": last_seen_at, + "name": name, + "traits": traits, + "update_only": update_only, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpsertUserResponse, + parse_obj_as( + type_=UpsertUserResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_user( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetUserResponse]: + """ + Parameters + ---------- + user_id : str + user_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetUserResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"users/{jsonable_encoder(user_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetUserResponse, + parse_obj_as( + type_=GetUserResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def delete_user( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeleteUserResponse]: + """ + Parameters + ---------- + user_id : str + user_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[DeleteUserResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"users/{jsonable_encoder(user_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteUserResponse, + parse_obj_as( + type_=DeleteUserResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def count_users( + self, + *, + company_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + q: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CountUsersResponse]: + """ + Parameters + ---------- + company_id : typing.Optional[str] + Filter users by company ID (starts with comp_) + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter users by multiple user IDs (starts with user_) + + plan_id : typing.Optional[str] + Filter users by plan ID (starts with plan_) + + q : typing.Optional[str] + Search for users by name, keys or string traits + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CountUsersResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "users/count", + method="GET", + params={ + "company_id": company_id, + "ids": ids, + "plan_id": plan_id, + "q": q, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountUsersResponse, + parse_obj_as( + type_=CountUsersResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def create_user( + self, + *, + keys: typing.Dict[str, str], + companies: typing.Optional[typing.Sequence[typing.Dict[str, str]]] = OMIT, + company: typing.Optional[typing.Dict[str, str]] = OMIT, + company_id: typing.Optional[str] = OMIT, + company_ids: typing.Optional[typing.Sequence[str]] = OMIT, + id: typing.Optional[str] = OMIT, + last_seen_at: typing.Optional[dt.datetime] = OMIT, + name: typing.Optional[str] = OMIT, + traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + update_only: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CreateUserResponse]: + """ + Parameters + ---------- + keys : typing.Dict[str, str] + See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + + companies : typing.Optional[typing.Sequence[typing.Dict[str, str]]] + Optionally specify companies using array of key/value pairs + + company : typing.Optional[typing.Dict[str, str]] + Add user to this company. Takes priority over companies. For exhaustive list of companies, use companies + + company_id : typing.Optional[str] + Add user to this company. Takes priority over company_ids. For exhaustive list of companies, use company_ids + + company_ids : typing.Optional[typing.Sequence[str]] + Optionally specify companies using Schematic company ID + + id : typing.Optional[str] + If you know the Schematic ID, you can use that here instead of keys + + last_seen_at : typing.Optional[dt.datetime] + + name : typing.Optional[str] + + traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + A map of trait names to trait values + + update_only : typing.Optional[bool] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CreateUserResponse] + Created + """ + _response = self._client_wrapper.httpx_client.request( + "users/create", + method="POST", + json={ + "companies": companies, + "company": company, + "company_id": company_id, + "company_ids": company_ids, + "id": id, + "keys": keys, + "last_seen_at": last_seen_at, + "name": name, + "traits": traits, + "update_only": update_only, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateUserResponse, + parse_obj_as( + type_=CreateUserResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def delete_user_by_keys( + self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeleteUserByKeysResponse]: + """ + Parameters + ---------- + keys : typing.Dict[str, str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[DeleteUserByKeysResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "users/delete", + method="POST", + json={ + "keys": keys, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteUserByKeysResponse, + parse_obj_as( + type_=DeleteUserByKeysResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def lookup_user( + self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[LookupUserResponse]: + """ + Parameters + ---------- + keys : typing.Dict[str, str] + Key/value pairs + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[LookupUserResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "users/lookup", + method="GET", + params={ + "keys": keys, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + LookupUserResponse, + parse_obj_as( + type_=LookupUserResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + +class AsyncRawCompaniesClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list_companies( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + q: typing.Optional[str] = None, + without_feature_override_for: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + with_subscription: typing.Optional[bool] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListCompaniesResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_id : typing.Optional[str] + Filter companies by plan ID (starts with plan_) + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_feature_override_for : typing.Optional[str] + Filter out companies that already have a company override for the specified feature ID + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + with_subscription : typing.Optional[bool] + Filter companies that have a subscription + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListCompaniesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "companies", + method="GET", + params={ + "ids": ids, + "plan_id": plan_id, + "q": q, + "without_feature_override_for": without_feature_override_for, + "without_plan": without_plan, + "with_subscription": with_subscription, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCompaniesResponse, + parse_obj_as( + type_=ListCompaniesResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def upsert_company( + self, + *, + keys: typing.Dict[str, str], + id: typing.Optional[str] = OMIT, + last_seen_at: typing.Optional[dt.datetime] = OMIT, + name: typing.Optional[str] = OMIT, + traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + update_only: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[UpsertCompanyResponse]: + """ + Parameters + ---------- + keys : typing.Dict[str, str] + See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + + id : typing.Optional[str] + If you know the Schematic ID, you can use that here instead of keys + + last_seen_at : typing.Optional[dt.datetime] + + name : typing.Optional[str] + + traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + A map of trait names to trait values + + update_only : typing.Optional[bool] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[UpsertCompanyResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "companies", + method="POST", + json={ + "id": id, + "keys": keys, + "last_seen_at": last_seen_at, + "name": name, + "traits": traits, + "update_only": update_only, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpsertCompanyResponse, + parse_obj_as( + type_=UpsertCompanyResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_company( + self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetCompanyResponse]: + """ + Parameters + ---------- + company_id : str + company_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetCompanyResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"companies/{jsonable_encoder(company_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetCompanyResponse, + parse_obj_as( + type_=GetCompanyResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def delete_company( + self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[DeleteCompanyResponse]: + """ + Parameters + ---------- + company_id : str + company_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[DeleteCompanyResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"companies/{jsonable_encoder(company_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteCompanyResponse, + parse_obj_as( + type_=DeleteCompanyResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def count_companies( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + q: typing.Optional[str] = None, + without_feature_override_for: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + with_subscription: typing.Optional[bool] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CountCompaniesResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_id : typing.Optional[str] + Filter companies by plan ID (starts with plan_) + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_feature_override_for : typing.Optional[str] + Filter out companies that already have a company override for the specified feature ID + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + with_subscription : typing.Optional[bool] + Filter companies that have a subscription + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CountCompaniesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "companies/count", + method="GET", + params={ + "ids": ids, + "plan_id": plan_id, + "q": q, + "without_feature_override_for": without_feature_override_for, + "without_plan": without_plan, + "with_subscription": with_subscription, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountCompaniesResponse, parse_obj_as( - type_=CreateUserResponse, # type: ignore + type_=CountCompaniesResponse, # type: ignore object_=_response.json(), ), ) - return HttpResponse(response=_response, data=_data) + return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -3415,44 +5189,109 @@ def create_user( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def delete_user_by_keys( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[DeleteUserByKeysResponse]: + async def count_companies_for_advanced_filter( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + feature_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_types: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + monetized_subscriptions: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + without_subscription: typing.Optional[bool] = None, + sort_order_column: typing.Optional[str] = None, + sort_order_direction: typing.Optional[CountCompaniesForAdvancedFilterRequestSortOrderDirection] = None, + display_properties: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CountCompaniesForAdvancedFilterResponse]: """ Parameters ---------- - keys : typing.Dict[str, str] + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more plan IDs (each ID starts with plan_) + + feature_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more feature IDs (each ID starts with feat_) + + subscription_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + + subscription_types : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription types (paid, free, trial) + + monetized_subscriptions : typing.Optional[bool] + Filter companies that have monetized subscriptions + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + without_subscription : typing.Optional[bool] + Filter out companies that have a subscription + + sort_order_column : typing.Optional[str] + Column to sort by (e.g. name, created_at, last_seen_at) + + sort_order_direction : typing.Optional[CountCompaniesForAdvancedFilterRequestSortOrderDirection] + Direction to sort by (asc or desc) + + display_properties : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Select the display columns to return (e.g. plan, subscription, users, last_seen) + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[DeleteUserByKeysResponse] + AsyncHttpResponse[CountCompaniesForAdvancedFilterResponse] OK """ - _response = self._client_wrapper.httpx_client.request( - "users/delete", - method="POST", - json={ - "keys": keys, - }, - headers={ - "content-type": "application/json", + _response = await self._client_wrapper.httpx_client.request( + "companies/count2", + method="GET", + params={ + "ids": ids, + "plan_ids": plan_ids, + "feature_ids": feature_ids, + "subscription_statuses": subscription_statuses, + "subscription_types": subscription_types, + "monetized_subscriptions": monetized_subscriptions, + "q": q, + "without_plan": without_plan, + "without_subscription": without_subscription, + "sort_order_column": sort_order_column, + "sort_order_direction": sort_order_direction, + "display_properties": display_properties, + "limit": limit, + "offset": offset, }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeleteUserByKeysResponse, + CountCompaniesForAdvancedFilterResponse, parse_obj_as( - type_=DeleteUserByKeysResponse, # type: ignore + type_=CountCompaniesForAdvancedFilterResponse, # type: ignore object_=_response.json(), ), ) - return HttpResponse(response=_response, data=_data) + return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -3517,41 +5356,81 @@ def delete_user_by_keys( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def lookup_user( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[LookupUserResponse]: + async def create_company( + self, + *, + keys: typing.Dict[str, str], + id: typing.Optional[str] = OMIT, + last_seen_at: typing.Optional[dt.datetime] = OMIT, + name: typing.Optional[str] = OMIT, + traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + update_only: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CreateCompanyResponse]: """ Parameters ---------- keys : typing.Dict[str, str] - Key/value pairs + See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + + id : typing.Optional[str] + If you know the Schematic ID, you can use that here instead of keys + + last_seen_at : typing.Optional[dt.datetime] + + name : typing.Optional[str] + + traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + A map of trait names to trait values + + update_only : typing.Optional[bool] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[LookupUserResponse] - OK + AsyncHttpResponse[CreateCompanyResponse] + Created """ - _response = self._client_wrapper.httpx_client.request( - "users/lookup", - method="GET", - params={ + _response = await self._client_wrapper.httpx_client.request( + "companies/create", + method="POST", + json={ + "id": id, "keys": keys, + "last_seen_at": last_seen_at, + "name": name, + "traits": traits, + "update_only": update_only, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - LookupUserResponse, + CreateCompanyResponse, parse_obj_as( - type_=LookupUserResponse, # type: ignore + type_=CreateCompanyResponse, # type: ignore object_=_response.json(), ), ) - return HttpResponse(response=_response, data=_data) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( headers=dict(_response.headers), @@ -3605,80 +5484,40 @@ def lookup_user( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - -class AsyncRawCompaniesClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._client_wrapper = client_wrapper - - async def list_companies( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - q: typing.Optional[str] = None, - without_feature_override_for: typing.Optional[str] = None, - without_plan: typing.Optional[bool] = None, - with_subscription: typing.Optional[bool] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ListCompaniesResponse]: + async def delete_company_by_keys( + self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[DeleteCompanyByKeysResponse]: """ Parameters ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - Filter companies by multiple company IDs (starts with comp_) - - plan_id : typing.Optional[str] - Filter companies by plan ID (starts with plan_) - - q : typing.Optional[str] - Search for companies by name, keys or string traits - - without_feature_override_for : typing.Optional[str] - Filter out companies that already have a company override for the specified feature ID - - without_plan : typing.Optional[bool] - Filter out companies that have a plan - - with_subscription : typing.Optional[bool] - Filter companies that have a subscription - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) + keys : typing.Dict[str, str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[ListCompaniesResponse] + AsyncHttpResponse[DeleteCompanyByKeysResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "companies", - method="GET", - params={ - "ids": ids, - "plan_id": plan_id, - "q": q, - "without_feature_override_for": without_feature_override_for, - "without_plan": without_plan, - "with_subscription": with_subscription, - "limit": limit, - "offset": offset, + "companies/delete", + method="POST", + json={ + "keys": keys, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListCompaniesResponse, + DeleteCompanyByKeysResponse, parse_obj_as( - type_=ListCompaniesResponse, # type: ignore + type_=DeleteCompanyByKeysResponse, # type: ignore object_=_response.json(), ), ) @@ -3747,66 +5586,105 @@ async def list_companies( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def upsert_company( + async def list_companies_for_advanced_filter( self, *, - keys: typing.Dict[str, str], - id: typing.Optional[str] = OMIT, - last_seen_at: typing.Optional[dt.datetime] = OMIT, - name: typing.Optional[str] = OMIT, - traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - update_only: typing.Optional[bool] = OMIT, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + feature_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + subscription_types: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + monetized_subscriptions: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + without_plan: typing.Optional[bool] = None, + without_subscription: typing.Optional[bool] = None, + sort_order_column: typing.Optional[str] = None, + sort_order_direction: typing.Optional[ListCompaniesForAdvancedFilterRequestSortOrderDirection] = None, + display_properties: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[UpsertCompanyResponse]: + ) -> AsyncHttpResponse[ListCompaniesForAdvancedFilterResponse]: """ Parameters ---------- - keys : typing.Dict[str, str] - See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by multiple company IDs (starts with comp_) - id : typing.Optional[str] - If you know the Schematic ID, you can use that here instead of keys + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more plan IDs (each ID starts with plan_) - last_seen_at : typing.Optional[dt.datetime] + feature_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more feature IDs (each ID starts with feat_) - name : typing.Optional[str] + subscription_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) - traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - A map of trait names to trait values + subscription_types : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter companies by one or more subscription types (paid, free, trial) - update_only : typing.Optional[bool] + monetized_subscriptions : typing.Optional[bool] + Filter companies that have monetized subscriptions + + q : typing.Optional[str] + Search for companies by name, keys or string traits + + without_plan : typing.Optional[bool] + Filter out companies that have a plan + + without_subscription : typing.Optional[bool] + Filter out companies that have a subscription + + sort_order_column : typing.Optional[str] + Column to sort by (e.g. name, created_at, last_seen_at) + + sort_order_direction : typing.Optional[ListCompaniesForAdvancedFilterRequestSortOrderDirection] + Direction to sort by (asc or desc) + + display_properties : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Select the display columns to return (e.g. plan, subscription, users, last_seen) + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[UpsertCompanyResponse] + AsyncHttpResponse[ListCompaniesForAdvancedFilterResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "companies", - method="POST", - json={ - "id": id, - "keys": keys, - "last_seen_at": last_seen_at, - "name": name, - "traits": traits, - "update_only": update_only, - }, - headers={ - "content-type": "application/json", + "companies/list2", + method="GET", + params={ + "ids": ids, + "plan_ids": plan_ids, + "feature_ids": feature_ids, + "subscription_statuses": subscription_statuses, + "subscription_types": subscription_types, + "monetized_subscriptions": monetized_subscriptions, + "q": q, + "without_plan": without_plan, + "without_subscription": without_subscription, + "sort_order_column": sort_order_column, + "sort_order_direction": sort_order_direction, + "display_properties": display_properties, + "limit": limit, + "offset": offset, }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpsertCompanyResponse, + ListCompaniesForAdvancedFilterResponse, parse_obj_as( - type_=UpsertCompanyResponse, # type: ignore + type_=ListCompaniesForAdvancedFilterResponse, # type: ignore object_=_response.json(), ), ) @@ -3875,34 +5753,37 @@ async def upsert_company( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_company( - self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[GetCompanyResponse]: + async def lookup_company( + self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[LookupCompanyResponse]: """ Parameters ---------- - company_id : str - company_id + keys : typing.Dict[str, str] + Key/value pairs request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[GetCompanyResponse] + AsyncHttpResponse[LookupCompanyResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - f"companies/{jsonable_encoder(company_id)}", + "companies/lookup", method="GET", + params={ + "keys": keys, + }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetCompanyResponse, + LookupCompanyResponse, parse_obj_as( - type_=GetCompanyResponse, # type: ignore + type_=LookupCompanyResponse, # type: ignore object_=_response.json(), ), ) @@ -3960,34 +5841,53 @@ async def get_company( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def delete_company( - self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[DeleteCompanyResponse]: + async def get_active_deals( + self, + *, + company_id: str, + deal_stage: str, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[GetActiveDealsResponse]: """ Parameters ---------- company_id : str - company_id + + deal_stage : str + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[DeleteCompanyResponse] + AsyncHttpResponse[GetActiveDealsResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - f"companies/{jsonable_encoder(company_id)}", - method="DELETE", + "company-crm-deals", + method="GET", + params={ + "company_id": company_id, + "deal_stage": deal_stage, + "limit": limit, + "offset": offset, + }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeleteCompanyResponse, + GetActiveDealsResponse, parse_obj_as( - type_=DeleteCompanyResponse, # type: ignore + type_=GetActiveDealsResponse, # type: ignore object_=_response.json(), ), ) @@ -4056,39 +5956,21 @@ async def delete_company( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def count_companies( + async def list_company_memberships( self, *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - q: typing.Optional[str] = None, - without_feature_override_for: typing.Optional[str] = None, - without_plan: typing.Optional[bool] = None, - with_subscription: typing.Optional[bool] = None, + company_id: typing.Optional[str] = None, + user_id: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[CountCompaniesResponse]: + ) -> AsyncHttpResponse[ListCompanyMembershipsResponse]: """ Parameters ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - Filter companies by multiple company IDs (starts with comp_) - - plan_id : typing.Optional[str] - Filter companies by plan ID (starts with plan_) - - q : typing.Optional[str] - Search for companies by name, keys or string traits - - without_feature_override_for : typing.Optional[str] - Filter out companies that already have a company override for the specified feature ID - - without_plan : typing.Optional[bool] - Filter out companies that have a plan + company_id : typing.Optional[str] - with_subscription : typing.Optional[bool] - Filter companies that have a subscription + user_id : typing.Optional[str] limit : typing.Optional[int] Page limit (default 100) @@ -4101,19 +5983,15 @@ async def count_companies( Returns ------- - AsyncHttpResponse[CountCompaniesResponse] + AsyncHttpResponse[ListCompanyMembershipsResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "companies/count", + "company-memberships", method="GET", params={ - "ids": ids, - "plan_id": plan_id, - "q": q, - "without_feature_override_for": without_feature_override_for, - "without_plan": without_plan, - "with_subscription": with_subscription, + "company_id": company_id, + "user_id": user_id, "limit": limit, "offset": offset, }, @@ -4122,9 +6000,9 @@ async def count_companies( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountCompaniesResponse, + ListCompanyMembershipsResponse, parse_obj_as( - type_=CountCompaniesResponse, # type: ignore + type_=ListCompanyMembershipsResponse, # type: ignore object_=_response.json(), ), ) @@ -4193,53 +6071,30 @@ async def count_companies( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def create_company( - self, - *, - keys: typing.Dict[str, str], - id: typing.Optional[str] = OMIT, - last_seen_at: typing.Optional[dt.datetime] = OMIT, - name: typing.Optional[str] = OMIT, - traits: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - update_only: typing.Optional[bool] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[CreateCompanyResponse]: + async def get_or_create_company_membership( + self, *, company_id: str, user_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetOrCreateCompanyMembershipResponse]: """ Parameters ---------- - keys : typing.Dict[str, str] - See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information - - id : typing.Optional[str] - If you know the Schematic ID, you can use that here instead of keys - - last_seen_at : typing.Optional[dt.datetime] - - name : typing.Optional[str] - - traits : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - A map of trait names to trait values + company_id : str - update_only : typing.Optional[bool] + user_id : str request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[CreateCompanyResponse] - Created + AsyncHttpResponse[GetOrCreateCompanyMembershipResponse] + OK """ _response = await self._client_wrapper.httpx_client.request( - "companies/create", + "company-memberships", method="POST", json={ - "id": id, - "keys": keys, - "last_seen_at": last_seen_at, - "name": name, - "traits": traits, - "update_only": update_only, + "company_id": company_id, + "user_id": user_id, }, headers={ "content-type": "application/json", @@ -4250,9 +6105,9 @@ async def create_company( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CreateCompanyResponse, + GetOrCreateCompanyMembershipResponse, parse_obj_as( - type_=CreateCompanyResponse, # type: ignore + type_=GetOrCreateCompanyMembershipResponse, # type: ignore object_=_response.json(), ), ) @@ -4321,40 +6176,149 @@ async def create_company( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def delete_company_by_keys( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[DeleteCompanyByKeysResponse]: + async def delete_company_membership( + self, company_membership_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[DeleteCompanyMembershipResponse]: + """ + Parameters + ---------- + company_membership_id : str + company_membership_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[DeleteCompanyMembershipResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"company-memberships/{jsonable_encoder(company_membership_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteCompanyMembershipResponse, + parse_obj_as( + type_=DeleteCompanyMembershipResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_active_company_subscription( + self, + *, + company_id: typing.Optional[str] = None, + company_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[GetActiveCompanySubscriptionResponse]: """ Parameters ---------- - keys : typing.Dict[str, str] + company_id : typing.Optional[str] + + company_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[DeleteCompanyByKeysResponse] + AsyncHttpResponse[GetActiveCompanySubscriptionResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "companies/delete", - method="POST", - json={ - "keys": keys, - }, - headers={ - "content-type": "application/json", + "company-subscriptions", + method="GET", + params={ + "company_id": company_id, + "company_ids": company_ids, + "limit": limit, + "offset": offset, }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeleteCompanyByKeysResponse, + GetActiveCompanySubscriptionResponse, parse_obj_as( - type_=DeleteCompanyByKeysResponse, # type: ignore + type_=GetActiveCompanySubscriptionResponse, # type: ignore object_=_response.json(), ), ) @@ -4423,41 +6387,79 @@ async def delete_company_by_keys( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def lookup_company( - self, *, keys: typing.Dict[str, str], request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[LookupCompanyResponse]: + async def upsert_company_trait( + self, + *, + keys: typing.Dict[str, str], + trait: str, + incr: typing.Optional[int] = OMIT, + set_: typing.Optional[str] = OMIT, + update_only: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[UpsertCompanyTraitResponse]: """ Parameters ---------- keys : typing.Dict[str, str] - Key/value pairs + Key/value pairs to identify a company or user + + trait : str + Name of the trait to update + + incr : typing.Optional[int] + Amount to increment the trait by (positive or negative) + + set_ : typing.Optional[str] + Value to set the trait to + + update_only : typing.Optional[bool] + Unless this is set, the company or user will be created if it does not already exist request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[LookupCompanyResponse] + AsyncHttpResponse[UpsertCompanyTraitResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "companies/lookup", - method="GET", - params={ + "company-traits", + method="POST", + json={ + "incr": incr, "keys": keys, + "set": set_, + "trait": trait, + "update_only": update_only, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - LookupCompanyResponse, + UpsertCompanyTraitResponse, parse_obj_as( - type_=LookupCompanyResponse, # type: ignore + type_=UpsertCompanyTraitResponse, # type: ignore object_=_response.json(), ), ) return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( headers=dict(_response.headers), @@ -4511,21 +6513,24 @@ async def lookup_company( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_active_deals( + async def list_entity_key_definitions( self, *, - company_id: str, - deal_stage: str, + entity_type: typing.Optional[ListEntityKeyDefinitionsRequestEntityType] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + q: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[GetActiveDealsResponse]: + ) -> AsyncHttpResponse[ListEntityKeyDefinitionsResponse]: """ Parameters ---------- - company_id : str + entity_type : typing.Optional[ListEntityKeyDefinitionsRequestEntityType] - deal_stage : str + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + q : typing.Optional[str] limit : typing.Optional[int] Page limit (default 100) @@ -4538,15 +6543,16 @@ async def get_active_deals( Returns ------- - AsyncHttpResponse[GetActiveDealsResponse] + AsyncHttpResponse[ListEntityKeyDefinitionsResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "company-crm-deals", + "entity-key-definitions", method="GET", params={ - "company_id": company_id, - "deal_stage": deal_stage, + "entity_type": entity_type, + "ids": ids, + "q": q, "limit": limit, "offset": offset, }, @@ -4555,9 +6561,9 @@ async def get_active_deals( try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetActiveDealsResponse, + ListEntityKeyDefinitionsResponse, parse_obj_as( - type_=GetActiveDealsResponse, # type: ignore + type_=ListEntityKeyDefinitionsResponse, # type: ignore object_=_response.json(), ), ) @@ -4626,21 +6632,24 @@ async def get_active_deals( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def list_company_memberships( + async def count_entity_key_definitions( self, *, - company_id: typing.Optional[str] = None, - user_id: typing.Optional[str] = None, + entity_type: typing.Optional[CountEntityKeyDefinitionsRequestEntityType] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + q: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ListCompanyMembershipsResponse]: + ) -> AsyncHttpResponse[CountEntityKeyDefinitionsResponse]: """ Parameters ---------- - company_id : typing.Optional[str] + entity_type : typing.Optional[CountEntityKeyDefinitionsRequestEntityType] - user_id : typing.Optional[str] + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + q : typing.Optional[str] limit : typing.Optional[int] Page limit (default 100) @@ -4653,15 +6662,16 @@ async def list_company_memberships( Returns ------- - AsyncHttpResponse[ListCompanyMembershipsResponse] + AsyncHttpResponse[CountEntityKeyDefinitionsResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "company-memberships", + "entity-key-definitions/count", method="GET", params={ - "company_id": company_id, - "user_id": user_id, + "entity_type": entity_type, + "ids": ids, + "q": q, "limit": limit, "offset": offset, }, @@ -4670,9 +6680,9 @@ async def list_company_memberships( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListCompanyMembershipsResponse, + CountEntityKeyDefinitionsResponse, parse_obj_as( - type_=ListCompanyMembershipsResponse, # type: ignore + type_=CountEntityKeyDefinitionsResponse, # type: ignore object_=_response.json(), ), ) @@ -4741,43 +6751,61 @@ async def list_company_memberships( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_or_create_company_membership( - self, *, company_id: str, user_id: str, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[GetOrCreateCompanyMembershipResponse]: + async def list_entity_trait_definitions( + self, + *, + entity_type: typing.Optional[ListEntityTraitDefinitionsRequestEntityType] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + q: typing.Optional[str] = None, + trait_type: typing.Optional[ListEntityTraitDefinitionsRequestTraitType] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListEntityTraitDefinitionsResponse]: """ Parameters ---------- - company_id : str + entity_type : typing.Optional[ListEntityTraitDefinitionsRequestEntityType] - user_id : str + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + q : typing.Optional[str] + + trait_type : typing.Optional[ListEntityTraitDefinitionsRequestTraitType] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[GetOrCreateCompanyMembershipResponse] + AsyncHttpResponse[ListEntityTraitDefinitionsResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "company-memberships", - method="POST", - json={ - "company_id": company_id, - "user_id": user_id, - }, - headers={ - "content-type": "application/json", + "entity-trait-definitions", + method="GET", + params={ + "entity_type": entity_type, + "ids": ids, + "q": q, + "trait_type": trait_type, + "limit": limit, + "offset": offset, }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetOrCreateCompanyMembershipResponse, + ListEntityTraitDefinitionsResponse, parse_obj_as( - type_=GetOrCreateCompanyMembershipResponse, # type: ignore + type_=ListEntityTraitDefinitionsResponse, # type: ignore object_=_response.json(), ), ) @@ -4846,34 +6874,55 @@ async def get_or_create_company_membership( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def delete_company_membership( - self, company_membership_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[DeleteCompanyMembershipResponse]: + async def get_or_create_entity_trait_definition( + self, + *, + entity_type: CreateEntityTraitDefinitionRequestBodyEntityType, + hierarchy: typing.Sequence[str], + trait_type: CreateEntityTraitDefinitionRequestBodyTraitType, + display_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[GetOrCreateEntityTraitDefinitionResponse]: """ Parameters ---------- - company_membership_id : str - company_membership_id + entity_type : CreateEntityTraitDefinitionRequestBodyEntityType + + hierarchy : typing.Sequence[str] + + trait_type : CreateEntityTraitDefinitionRequestBodyTraitType + + display_name : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[DeleteCompanyMembershipResponse] + AsyncHttpResponse[GetOrCreateEntityTraitDefinitionResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - f"company-memberships/{jsonable_encoder(company_membership_id)}", - method="DELETE", + "entity-trait-definitions", + method="POST", + json={ + "display_name": display_name, + "entity_type": entity_type, + "hierarchy": hierarchy, + "trait_type": trait_type, + }, + headers={ + "content-type": "application/json", + }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeleteCompanyMembershipResponse, + GetOrCreateEntityTraitDefinitionResponse, parse_obj_as( - type_=DeleteCompanyMembershipResponse, # type: ignore + type_=GetOrCreateEntityTraitDefinitionResponse, # type: ignore object_=_response.json(), ), ) @@ -4940,70 +6989,40 @@ async def delete_company_membership( ) raise core_api_error_ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def get_active_company_subscription( - self, - *, - company_id: typing.Optional[str] = None, - company_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[GetActiveCompanySubscriptionResponse]: + ) + + async def get_entity_trait_definition( + self, entity_trait_definition_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetEntityTraitDefinitionResponse]: """ Parameters ---------- - company_id : typing.Optional[str] - - company_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) + entity_trait_definition_id : str + entity_trait_definition_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[GetActiveCompanySubscriptionResponse] + AsyncHttpResponse[GetEntityTraitDefinitionResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "company-subscriptions", + f"entity-trait-definitions/{jsonable_encoder(entity_trait_definition_id)}", method="GET", - params={ - "company_id": company_id, - "company_ids": company_ids, - "limit": limit, - "offset": offset, - }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetActiveCompanySubscriptionResponse, + GetEntityTraitDefinitionResponse, parse_obj_as( - type_=GetActiveCompanySubscriptionResponse, # type: ignore + type_=GetEntityTraitDefinitionResponse, # type: ignore object_=_response.json(), ), ) return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( headers=dict(_response.headers), @@ -5057,51 +7076,38 @@ async def get_active_company_subscription( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def upsert_company_trait( + async def update_entity_trait_definition( self, + entity_trait_definition_id: str, *, - keys: typing.Dict[str, str], - trait: str, - incr: typing.Optional[int] = OMIT, - set_: typing.Optional[str] = OMIT, - update_only: typing.Optional[bool] = OMIT, + trait_type: UpdateEntityTraitDefinitionRequestBodyTraitType, + display_name: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[UpsertCompanyTraitResponse]: + ) -> AsyncHttpResponse[UpdateEntityTraitDefinitionResponse]: """ Parameters ---------- - keys : typing.Dict[str, str] - Key/value pairs to identify a company or user - - trait : str - Name of the trait to update - - incr : typing.Optional[int] - Amount to increment the trait by (positive or negative) + entity_trait_definition_id : str + entity_trait_definition_id - set_ : typing.Optional[str] - Value to set the trait to + trait_type : UpdateEntityTraitDefinitionRequestBodyTraitType - update_only : typing.Optional[bool] - Unless this is set, the company or user will be created if it does not already exist + display_name : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[UpsertCompanyTraitResponse] + AsyncHttpResponse[UpdateEntityTraitDefinitionResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "company-traits", - method="POST", + f"entity-trait-definitions/{jsonable_encoder(entity_trait_definition_id)}", + method="PUT", json={ - "incr": incr, - "keys": keys, - "set": set_, - "trait": trait, - "update_only": update_only, + "display_name": display_name, + "trait_type": trait_type, }, headers={ "content-type": "application/json", @@ -5112,9 +7118,9 @@ async def upsert_company_trait( try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpsertCompanyTraitResponse, + UpdateEntityTraitDefinitionResponse, parse_obj_as( - type_=UpsertCompanyTraitResponse, # type: ignore + type_=UpdateEntityTraitDefinitionResponse, # type: ignore object_=_response.json(), ), ) @@ -5183,25 +7189,28 @@ async def upsert_company_trait( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def list_entity_key_definitions( + async def count_entity_trait_definitions( self, *, - entity_type: typing.Optional[ListEntityKeyDefinitionsRequestEntityType] = None, + entity_type: typing.Optional[CountEntityTraitDefinitionsRequestEntityType] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, q: typing.Optional[str] = None, + trait_type: typing.Optional[CountEntityTraitDefinitionsRequestTraitType] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ListEntityKeyDefinitionsResponse]: + ) -> AsyncHttpResponse[CountEntityTraitDefinitionsResponse]: """ Parameters ---------- - entity_type : typing.Optional[ListEntityKeyDefinitionsRequestEntityType] + entity_type : typing.Optional[CountEntityTraitDefinitionsRequestEntityType] ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] q : typing.Optional[str] + trait_type : typing.Optional[CountEntityTraitDefinitionsRequestTraitType] + limit : typing.Optional[int] Page limit (default 100) @@ -5213,16 +7222,17 @@ async def list_entity_key_definitions( Returns ------- - AsyncHttpResponse[ListEntityKeyDefinitionsResponse] + AsyncHttpResponse[CountEntityTraitDefinitionsResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "entity-key-definitions", + "entity-trait-definitions/count", method="GET", params={ "entity_type": entity_type, "ids": ids, "q": q, + "trait_type": trait_type, "limit": limit, "offset": offset, }, @@ -5231,9 +7241,9 @@ async def list_entity_key_definitions( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListEntityKeyDefinitionsResponse, + CountEntityTraitDefinitionsResponse, parse_obj_as( - type_=ListEntityKeyDefinitionsResponse, # type: ignore + type_=CountEntityTraitDefinitionsResponse, # type: ignore object_=_response.json(), ), ) @@ -5302,22 +7312,19 @@ async def list_entity_key_definitions( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def count_entity_key_definitions( + async def get_entity_trait_values( self, *, - entity_type: typing.Optional[CountEntityKeyDefinitionsRequestEntityType] = None, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + definition_id: str, q: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[CountEntityKeyDefinitionsResponse]: + ) -> AsyncHttpResponse[GetEntityTraitValuesResponse]: """ Parameters ---------- - entity_type : typing.Optional[CountEntityKeyDefinitionsRequestEntityType] - - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + definition_id : str q : typing.Optional[str] @@ -5332,15 +7339,14 @@ async def count_entity_key_definitions( Returns ------- - AsyncHttpResponse[CountEntityKeyDefinitionsResponse] + AsyncHttpResponse[GetEntityTraitValuesResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "entity-key-definitions/count", + "entity-trait-values", method="GET", params={ - "entity_type": entity_type, - "ids": ids, + "definition_id": definition_id, "q": q, "limit": limit, "offset": offset, @@ -5350,9 +7356,9 @@ async def count_entity_key_definitions( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountEntityKeyDefinitionsResponse, + GetEntityTraitValuesResponse, parse_obj_as( - type_=CountEntityKeyDefinitionsResponse, # type: ignore + type_=GetEntityTraitValuesResponse, # type: ignore object_=_response.json(), ), ) @@ -5421,27 +7427,27 @@ async def count_entity_key_definitions( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def list_entity_trait_definitions( + async def list_plan_traits( self, *, - entity_type: typing.Optional[ListEntityTraitDefinitionsRequestEntityType] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - q: typing.Optional[str] = None, - trait_type: typing.Optional[ListEntityTraitDefinitionsRequestTraitType] = None, + plan_id: typing.Optional[str] = None, + trait_id: typing.Optional[str] = None, + trait_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ListEntityTraitDefinitionsResponse]: + ) -> AsyncHttpResponse[ListPlanTraitsResponse]: """ Parameters ---------- - entity_type : typing.Optional[ListEntityTraitDefinitionsRequestEntityType] - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - q : typing.Optional[str] + plan_id : typing.Optional[str] - trait_type : typing.Optional[ListEntityTraitDefinitionsRequestTraitType] + trait_id : typing.Optional[str] + + trait_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] limit : typing.Optional[int] Page limit (default 100) @@ -5454,17 +7460,17 @@ async def list_entity_trait_definitions( Returns ------- - AsyncHttpResponse[ListEntityTraitDefinitionsResponse] + AsyncHttpResponse[ListPlanTraitsResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "entity-trait-definitions", + "plan-traits", method="GET", params={ - "entity_type": entity_type, "ids": ids, - "q": q, - "trait_type": trait_type, + "plan_id": plan_id, + "trait_id": trait_id, + "trait_ids": trait_ids, "limit": limit, "offset": offset, }, @@ -5473,9 +7479,9 @@ async def list_entity_trait_definitions( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListEntityTraitDefinitionsResponse, + ListPlanTraitsResponse, parse_obj_as( - type_=ListEntityTraitDefinitionsResponse, # type: ignore + type_=ListPlanTraitsResponse, # type: ignore object_=_response.json(), ), ) @@ -5544,42 +7550,33 @@ async def list_entity_trait_definitions( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_or_create_entity_trait_definition( - self, - *, - entity_type: CreateEntityTraitDefinitionRequestBodyEntityType, - hierarchy: typing.Sequence[str], - trait_type: CreateEntityTraitDefinitionRequestBodyTraitType, - display_name: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[GetOrCreateEntityTraitDefinitionResponse]: + async def create_plan_trait( + self, *, plan_id: str, trait_id: str, trait_value: str, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[CreatePlanTraitResponse]: """ Parameters ---------- - entity_type : CreateEntityTraitDefinitionRequestBodyEntityType - - hierarchy : typing.Sequence[str] + plan_id : str - trait_type : CreateEntityTraitDefinitionRequestBodyTraitType + trait_id : str - display_name : typing.Optional[str] + trait_value : str request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[GetOrCreateEntityTraitDefinitionResponse] - OK + AsyncHttpResponse[CreatePlanTraitResponse] + Created """ _response = await self._client_wrapper.httpx_client.request( - "entity-trait-definitions", + "plan-traits", method="POST", json={ - "display_name": display_name, - "entity_type": entity_type, - "hierarchy": hierarchy, - "trait_type": trait_type, + "plan_id": plan_id, + "trait_id": trait_id, + "trait_value": trait_value, }, headers={ "content-type": "application/json", @@ -5590,9 +7587,9 @@ async def get_or_create_entity_trait_definition( try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetOrCreateEntityTraitDefinitionResponse, + CreatePlanTraitResponse, parse_obj_as( - type_=GetOrCreateEntityTraitDefinitionResponse, # type: ignore + type_=CreatePlanTraitResponse, # type: ignore object_=_response.json(), ), ) @@ -5661,34 +7658,34 @@ async def get_or_create_entity_trait_definition( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_entity_trait_definition( - self, entity_trait_definition_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[GetEntityTraitDefinitionResponse]: + async def get_plan_trait( + self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetPlanTraitResponse]: """ Parameters ---------- - entity_trait_definition_id : str - entity_trait_definition_id + plan_trait_id : str + plan_trait_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[GetEntityTraitDefinitionResponse] + AsyncHttpResponse[GetPlanTraitResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - f"entity-trait-definitions/{jsonable_encoder(entity_trait_definition_id)}", + f"plan-traits/{jsonable_encoder(plan_trait_id)}", method="GET", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetEntityTraitDefinitionResponse, + GetPlanTraitResponse, parse_obj_as( - type_=GetEntityTraitDefinitionResponse, # type: ignore + type_=GetPlanTraitResponse, # type: ignore object_=_response.json(), ), ) @@ -5746,38 +7743,38 @@ async def get_entity_trait_definition( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def update_entity_trait_definition( + async def update_plan_trait( self, - entity_trait_definition_id: str, + plan_trait_id: str, *, - trait_type: UpdateEntityTraitDefinitionRequestBodyTraitType, - display_name: typing.Optional[str] = OMIT, + plan_id: str, + trait_value: str, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[UpdateEntityTraitDefinitionResponse]: + ) -> AsyncHttpResponse[UpdatePlanTraitResponse]: """ Parameters ---------- - entity_trait_definition_id : str - entity_trait_definition_id + plan_trait_id : str + plan_trait_id - trait_type : UpdateEntityTraitDefinitionRequestBodyTraitType + plan_id : str - display_name : typing.Optional[str] + trait_value : str request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[UpdateEntityTraitDefinitionResponse] + AsyncHttpResponse[UpdatePlanTraitResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - f"entity-trait-definitions/{jsonable_encoder(entity_trait_definition_id)}", + f"plan-traits/{jsonable_encoder(plan_trait_id)}", method="PUT", json={ - "display_name": display_name, - "trait_type": trait_type, + "plan_id": plan_id, + "trait_value": trait_value, }, headers={ "content-type": "application/json", @@ -5788,9 +7785,9 @@ async def update_entity_trait_definition( try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpdateEntityTraitDefinitionResponse, + UpdatePlanTraitResponse, parse_obj_as( - type_=UpdateEntityTraitDefinitionResponse, # type: ignore + type_=UpdatePlanTraitResponse, # type: ignore object_=_response.json(), ), ) @@ -5859,61 +7856,34 @@ async def update_entity_trait_definition( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def count_entity_trait_definitions( - self, - *, - entity_type: typing.Optional[CountEntityTraitDefinitionsRequestEntityType] = None, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - q: typing.Optional[str] = None, - trait_type: typing.Optional[CountEntityTraitDefinitionsRequestTraitType] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[CountEntityTraitDefinitionsResponse]: + async def delete_plan_trait( + self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[DeletePlanTraitResponse]: """ Parameters ---------- - entity_type : typing.Optional[CountEntityTraitDefinitionsRequestEntityType] - - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - q : typing.Optional[str] - - trait_type : typing.Optional[CountEntityTraitDefinitionsRequestTraitType] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) + plan_trait_id : str + plan_trait_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[CountEntityTraitDefinitionsResponse] + AsyncHttpResponse[DeletePlanTraitResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "entity-trait-definitions/count", - method="GET", - params={ - "entity_type": entity_type, - "ids": ids, - "q": q, - "trait_type": trait_type, - "limit": limit, - "offset": offset, - }, + f"plan-traits/{jsonable_encoder(plan_trait_id)}", + method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountEntityTraitDefinitionsResponse, + DeletePlanTraitResponse, parse_obj_as( - type_=CountEntityTraitDefinitionsResponse, # type: ignore + type_=DeletePlanTraitResponse, # type: ignore object_=_response.json(), ), ) @@ -5982,21 +7952,27 @@ async def count_entity_trait_definitions( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_entity_trait_values( + async def count_plan_traits( self, *, - definition_id: str, - q: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_id: typing.Optional[str] = None, + trait_id: typing.Optional[str] = None, + trait_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[GetEntityTraitValuesResponse]: + ) -> AsyncHttpResponse[CountPlanTraitsResponse]: """ Parameters ---------- - definition_id : str + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - q : typing.Optional[str] + plan_id : typing.Optional[str] + + trait_id : typing.Optional[str] + + trait_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] limit : typing.Optional[int] Page limit (default 100) @@ -6009,15 +7985,17 @@ async def get_entity_trait_values( Returns ------- - AsyncHttpResponse[GetEntityTraitValuesResponse] + AsyncHttpResponse[CountPlanTraitsResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - "entity-trait-values", + "plan-traits/count", method="GET", params={ - "definition_id": definition_id, - "q": q, + "ids": ids, + "plan_id": plan_id, + "trait_id": trait_id, + "trait_ids": trait_ids, "limit": limit, "offset": offset, }, @@ -6026,9 +8004,9 @@ async def get_entity_trait_values( try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetEntityTraitValuesResponse, + CountPlanTraitsResponse, parse_obj_as( - type_=GetEntityTraitValuesResponse, # type: ignore + type_=CountPlanTraitsResponse, # type: ignore object_=_response.json(), ), ) diff --git a/src/schematic/companies/types/__init__.py b/src/schematic/companies/types/__init__.py index d9d925f..5a235b8 100644 --- a/src/schematic/companies/types/__init__.py +++ b/src/schematic/companies/types/__init__.py @@ -2,6 +2,14 @@ # isort: skip_file +from .count_companies_for_advanced_filter_params import CountCompaniesForAdvancedFilterParams +from .count_companies_for_advanced_filter_request_sort_order_direction import ( + CountCompaniesForAdvancedFilterRequestSortOrderDirection, +) +from .count_companies_for_advanced_filter_response import CountCompaniesForAdvancedFilterResponse +from .count_companies_for_advanced_filter_response_params_sort_order_direction import ( + CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection, +) from .count_companies_params import CountCompaniesParams from .count_companies_response import CountCompaniesResponse from .count_entity_key_definitions_params import CountEntityKeyDefinitionsParams @@ -18,15 +26,19 @@ from .count_entity_trait_definitions_response_params_trait_type import ( CountEntityTraitDefinitionsResponseParamsTraitType, ) +from .count_plan_traits_params import CountPlanTraitsParams +from .count_plan_traits_response import CountPlanTraitsResponse from .count_users_params import CountUsersParams from .count_users_response import CountUsersResponse from .create_company_response import CreateCompanyResponse from .create_entity_trait_definition_request_body_entity_type import CreateEntityTraitDefinitionRequestBodyEntityType from .create_entity_trait_definition_request_body_trait_type import CreateEntityTraitDefinitionRequestBodyTraitType +from .create_plan_trait_response import CreatePlanTraitResponse from .create_user_response import CreateUserResponse from .delete_company_by_keys_response import DeleteCompanyByKeysResponse from .delete_company_membership_response import DeleteCompanyMembershipResponse from .delete_company_response import DeleteCompanyResponse +from .delete_plan_trait_response import DeletePlanTraitResponse from .delete_user_by_keys_response import DeleteUserByKeysResponse from .delete_user_response import DeleteUserResponse from .get_active_company_subscription_params import GetActiveCompanySubscriptionParams @@ -39,7 +51,16 @@ from .get_entity_trait_values_response import GetEntityTraitValuesResponse from .get_or_create_company_membership_response import GetOrCreateCompanyMembershipResponse from .get_or_create_entity_trait_definition_response import GetOrCreateEntityTraitDefinitionResponse +from .get_plan_trait_response import GetPlanTraitResponse from .get_user_response import GetUserResponse +from .list_companies_for_advanced_filter_params import ListCompaniesForAdvancedFilterParams +from .list_companies_for_advanced_filter_request_sort_order_direction import ( + ListCompaniesForAdvancedFilterRequestSortOrderDirection, +) +from .list_companies_for_advanced_filter_response import ListCompaniesForAdvancedFilterResponse +from .list_companies_for_advanced_filter_response_params_sort_order_direction import ( + ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection, +) from .list_companies_params import ListCompaniesParams from .list_companies_response import ListCompaniesResponse from .list_company_memberships_params import ListCompanyMembershipsParams @@ -56,6 +77,8 @@ ListEntityTraitDefinitionsResponseParamsEntityType, ) from .list_entity_trait_definitions_response_params_trait_type import ListEntityTraitDefinitionsResponseParamsTraitType +from .list_plan_traits_params import ListPlanTraitsParams +from .list_plan_traits_response import ListPlanTraitsResponse from .list_users_params import ListUsersParams from .list_users_response import ListUsersResponse from .lookup_company_params import LookupCompanyParams @@ -64,12 +87,17 @@ from .lookup_user_response import LookupUserResponse from .update_entity_trait_definition_request_body_trait_type import UpdateEntityTraitDefinitionRequestBodyTraitType from .update_entity_trait_definition_response import UpdateEntityTraitDefinitionResponse +from .update_plan_trait_response import UpdatePlanTraitResponse from .upsert_company_response import UpsertCompanyResponse from .upsert_company_trait_response import UpsertCompanyTraitResponse from .upsert_user_response import UpsertUserResponse from .upsert_user_trait_response import UpsertUserTraitResponse __all__ = [ + "CountCompaniesForAdvancedFilterParams", + "CountCompaniesForAdvancedFilterRequestSortOrderDirection", + "CountCompaniesForAdvancedFilterResponse", + "CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection", "CountCompaniesParams", "CountCompaniesResponse", "CountEntityKeyDefinitionsParams", @@ -82,15 +110,19 @@ "CountEntityTraitDefinitionsResponse", "CountEntityTraitDefinitionsResponseParamsEntityType", "CountEntityTraitDefinitionsResponseParamsTraitType", + "CountPlanTraitsParams", + "CountPlanTraitsResponse", "CountUsersParams", "CountUsersResponse", "CreateCompanyResponse", "CreateEntityTraitDefinitionRequestBodyEntityType", "CreateEntityTraitDefinitionRequestBodyTraitType", + "CreatePlanTraitResponse", "CreateUserResponse", "DeleteCompanyByKeysResponse", "DeleteCompanyMembershipResponse", "DeleteCompanyResponse", + "DeletePlanTraitResponse", "DeleteUserByKeysResponse", "DeleteUserResponse", "GetActiveCompanySubscriptionParams", @@ -103,7 +135,12 @@ "GetEntityTraitValuesResponse", "GetOrCreateCompanyMembershipResponse", "GetOrCreateEntityTraitDefinitionResponse", + "GetPlanTraitResponse", "GetUserResponse", + "ListCompaniesForAdvancedFilterParams", + "ListCompaniesForAdvancedFilterRequestSortOrderDirection", + "ListCompaniesForAdvancedFilterResponse", + "ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection", "ListCompaniesParams", "ListCompaniesResponse", "ListCompanyMembershipsParams", @@ -118,6 +155,8 @@ "ListEntityTraitDefinitionsResponse", "ListEntityTraitDefinitionsResponseParamsEntityType", "ListEntityTraitDefinitionsResponseParamsTraitType", + "ListPlanTraitsParams", + "ListPlanTraitsResponse", "ListUsersParams", "ListUsersResponse", "LookupCompanyParams", @@ -126,6 +165,7 @@ "LookupUserResponse", "UpdateEntityTraitDefinitionRequestBodyTraitType", "UpdateEntityTraitDefinitionResponse", + "UpdatePlanTraitResponse", "UpsertCompanyResponse", "UpsertCompanyTraitResponse", "UpsertUserResponse", diff --git a/src/schematic/companies/types/count_companies_for_advanced_filter_params.py b/src/schematic/companies/types/count_companies_for_advanced_filter_params.py new file mode 100644 index 0000000..da32505 --- /dev/null +++ b/src/schematic/companies/types/count_companies_for_advanced_filter_params.py @@ -0,0 +1,96 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .count_companies_for_advanced_filter_response_params_sort_order_direction import ( + CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection, +) + + +class CountCompaniesForAdvancedFilterParams(UniversalBaseModel): + """ + Input parameters + """ + + display_properties: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Select the display columns to return (e.g. plan, subscription, users, last_seen) + """ + + feature_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by one or more feature IDs (each ID starts with feat_) + """ + + ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by multiple company IDs (starts with comp_) + """ + + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + monetized_subscriptions: typing.Optional[bool] = pydantic.Field(default=None) + """ + Filter companies that have monetized subscriptions + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + plan_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by one or more plan IDs (each ID starts with plan_) + """ + + q: typing.Optional[str] = pydantic.Field(default=None) + """ + Search for companies by name, keys or string traits + """ + + sort_order_column: typing.Optional[str] = pydantic.Field(default=None) + """ + Column to sort by (e.g. name, created_at, last_seen_at) + """ + + sort_order_direction: typing.Optional[CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection] = ( + pydantic.Field(default=None) + ) + """ + Direction to sort by (asc or desc) + """ + + subscription_statuses: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + """ + + subscription_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by one or more subscription types (paid, free, trial) + """ + + without_plan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Filter out companies that have a plan + """ + + without_subscription: typing.Optional[bool] = pydantic.Field(default=None) + """ + Filter out companies that have a subscription + """ + + 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/companies/types/count_companies_for_advanced_filter_request_sort_order_direction.py b/src/schematic/companies/types/count_companies_for_advanced_filter_request_sort_order_direction.py new file mode 100644 index 0000000..c441939 --- /dev/null +++ b/src/schematic/companies/types/count_companies_for_advanced_filter_request_sort_order_direction.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CountCompaniesForAdvancedFilterRequestSortOrderDirection = typing.Union[typing.Literal["asc", "desc"], typing.Any] diff --git a/src/schematic/companies/types/count_companies_for_advanced_filter_response.py b/src/schematic/companies/types/count_companies_for_advanced_filter_response.py new file mode 100644 index 0000000..5fb16f3 --- /dev/null +++ b/src/schematic/companies/types/count_companies_for_advanced_filter_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.count_response import CountResponse +from .count_companies_for_advanced_filter_params import CountCompaniesForAdvancedFilterParams + + +class CountCompaniesForAdvancedFilterResponse(UniversalBaseModel): + data: CountResponse + params: CountCompaniesForAdvancedFilterParams = 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/companies/types/count_companies_for_advanced_filter_response_params_sort_order_direction.py b/src/schematic/companies/types/count_companies_for_advanced_filter_response_params_sort_order_direction.py new file mode 100644 index 0000000..634b179 --- /dev/null +++ b/src/schematic/companies/types/count_companies_for_advanced_filter_response_params_sort_order_direction.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CountCompaniesForAdvancedFilterResponseParamsSortOrderDirection = typing.Union[ + typing.Literal["asc", "desc"], typing.Any +] diff --git a/src/schematic/plans/types/count_plan_traits_params.py b/src/schematic/companies/types/count_plan_traits_params.py similarity index 94% rename from src/schematic/plans/types/count_plan_traits_params.py rename to src/schematic/companies/types/count_plan_traits_params.py index eae5d24..451db07 100644 --- a/src/schematic/plans/types/count_plan_traits_params.py +++ b/src/schematic/companies/types/count_plan_traits_params.py @@ -24,6 +24,7 @@ class CountPlanTraitsParams(UniversalBaseModel): plan_id: typing.Optional[str] = None trait_id: typing.Optional[str] = None + trait_ids: typing.Optional[typing.List[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/plans/types/count_plan_traits_response.py b/src/schematic/companies/types/count_plan_traits_response.py similarity index 100% rename from src/schematic/plans/types/count_plan_traits_response.py rename to src/schematic/companies/types/count_plan_traits_response.py diff --git a/src/schematic/plans/types/create_plan_trait_response.py b/src/schematic/companies/types/create_plan_trait_response.py similarity index 100% rename from src/schematic/plans/types/create_plan_trait_response.py rename to src/schematic/companies/types/create_plan_trait_response.py diff --git a/src/schematic/plans/types/delete_plan_trait_response.py b/src/schematic/companies/types/delete_plan_trait_response.py similarity index 100% rename from src/schematic/plans/types/delete_plan_trait_response.py rename to src/schematic/companies/types/delete_plan_trait_response.py diff --git a/src/schematic/plans/types/get_plan_trait_response.py b/src/schematic/companies/types/get_plan_trait_response.py similarity index 100% rename from src/schematic/plans/types/get_plan_trait_response.py rename to src/schematic/companies/types/get_plan_trait_response.py diff --git a/src/schematic/companies/types/list_companies_for_advanced_filter_params.py b/src/schematic/companies/types/list_companies_for_advanced_filter_params.py new file mode 100644 index 0000000..653c7b4 --- /dev/null +++ b/src/schematic/companies/types/list_companies_for_advanced_filter_params.py @@ -0,0 +1,96 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .list_companies_for_advanced_filter_response_params_sort_order_direction import ( + ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection, +) + + +class ListCompaniesForAdvancedFilterParams(UniversalBaseModel): + """ + Input parameters + """ + + display_properties: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Select the display columns to return (e.g. plan, subscription, users, last_seen) + """ + + feature_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by one or more feature IDs (each ID starts with feat_) + """ + + ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by multiple company IDs (starts with comp_) + """ + + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + monetized_subscriptions: typing.Optional[bool] = pydantic.Field(default=None) + """ + Filter companies that have monetized subscriptions + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + plan_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by one or more plan IDs (each ID starts with plan_) + """ + + q: typing.Optional[str] = pydantic.Field(default=None) + """ + Search for companies by name, keys or string traits + """ + + sort_order_column: typing.Optional[str] = pydantic.Field(default=None) + """ + Column to sort by (e.g. name, created_at, last_seen_at) + """ + + sort_order_direction: typing.Optional[ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection] = ( + pydantic.Field(default=None) + ) + """ + Direction to sort by (asc or desc) + """ + + subscription_statuses: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by one or more subscription statuses (active, canceled, expired, incomplete, incomplete_expired, past_due, paused, trialing, unpaid) + """ + + subscription_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter companies by one or more subscription types (paid, free, trial) + """ + + without_plan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Filter out companies that have a plan + """ + + without_subscription: typing.Optional[bool] = pydantic.Field(default=None) + """ + Filter out companies that have a subscription + """ + + 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/companies/types/list_companies_for_advanced_filter_request_sort_order_direction.py b/src/schematic/companies/types/list_companies_for_advanced_filter_request_sort_order_direction.py new file mode 100644 index 0000000..0245d9f --- /dev/null +++ b/src/schematic/companies/types/list_companies_for_advanced_filter_request_sort_order_direction.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ListCompaniesForAdvancedFilterRequestSortOrderDirection = typing.Union[typing.Literal["asc", "desc"], typing.Any] diff --git a/src/schematic/companies/types/list_companies_for_advanced_filter_response.py b/src/schematic/companies/types/list_companies_for_advanced_filter_response.py new file mode 100644 index 0000000..6ad88a8 --- /dev/null +++ b/src/schematic/companies/types/list_companies_for_advanced_filter_response.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.company_view_with_feature_usage_response_data import CompanyViewWithFeatureUsageResponseData +from .list_companies_for_advanced_filter_params import ListCompaniesForAdvancedFilterParams + + +class ListCompaniesForAdvancedFilterResponse(UniversalBaseModel): + data: typing.List[CompanyViewWithFeatureUsageResponseData] = pydantic.Field() + """ + The returned resources + """ + + params: ListCompaniesForAdvancedFilterParams = 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/companies/types/list_companies_for_advanced_filter_response_params_sort_order_direction.py b/src/schematic/companies/types/list_companies_for_advanced_filter_response_params_sort_order_direction.py new file mode 100644 index 0000000..e4a5dd4 --- /dev/null +++ b/src/schematic/companies/types/list_companies_for_advanced_filter_response_params_sort_order_direction.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ListCompaniesForAdvancedFilterResponseParamsSortOrderDirection = typing.Union[typing.Literal["asc", "desc"], typing.Any] diff --git a/src/schematic/plans/types/list_plan_traits_params.py b/src/schematic/companies/types/list_plan_traits_params.py similarity index 94% rename from src/schematic/plans/types/list_plan_traits_params.py rename to src/schematic/companies/types/list_plan_traits_params.py index af69df7..431f9ae 100644 --- a/src/schematic/plans/types/list_plan_traits_params.py +++ b/src/schematic/companies/types/list_plan_traits_params.py @@ -24,6 +24,7 @@ class ListPlanTraitsParams(UniversalBaseModel): plan_id: typing.Optional[str] = None trait_id: typing.Optional[str] = None + trait_ids: typing.Optional[typing.List[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/plans/types/list_plan_traits_response.py b/src/schematic/companies/types/list_plan_traits_response.py similarity index 100% rename from src/schematic/plans/types/list_plan_traits_response.py rename to src/schematic/companies/types/list_plan_traits_response.py diff --git a/src/schematic/plans/types/update_plan_trait_response.py b/src/schematic/companies/types/update_plan_trait_response.py similarity index 100% rename from src/schematic/plans/types/update_plan_trait_response.py rename to src/schematic/companies/types/update_plan_trait_response.py diff --git a/src/schematic/core/client_wrapper.py b/src/schematic/core/client_wrapper.py index cc0c6f4..e6763e6 100644 --- a/src/schematic/core/client_wrapper.py +++ b/src/schematic/core/client_wrapper.py @@ -14,10 +14,10 @@ def __init__(self, *, api_key: str, base_url: str, timeout: typing.Optional[floa def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { - "User-Agent": "schematichq/1.0.9", + "User-Agent": "schematichq/1.1.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "schematichq", - "X-Fern-SDK-Version": "1.0.9", + "X-Fern-SDK-Version": "1.1.0", } headers["X-Schematic-Api-Key"] = self.api_key return headers diff --git a/src/schematic/credits/__init__.py b/src/schematic/credits/__init__.py new file mode 100644 index 0000000..97cdc6a --- /dev/null +++ b/src/schematic/credits/__init__.py @@ -0,0 +1,107 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + +from .types import ( + CountBillingCreditsGrantsParams, + CountBillingCreditsGrantsResponse, + CountBillingCreditsParams, + CountBillingCreditsResponse, + CountBillingPlanCreditGrantsParams, + CountBillingPlanCreditGrantsResponse, + CountCreditBundlesParams, + CountCreditBundlesRequestStatus, + CountCreditBundlesResponse, + CountCreditBundlesResponseParamsStatus, + CreateBillingCreditRequestBodyBurnStrategy, + CreateBillingCreditRequestBodyDefaultRolloverPolicy, + CreateBillingCreditResponse, + CreateBillingPlanCreditGrantRequestBodyResetCadence, + CreateBillingPlanCreditGrantRequestBodyResetStart, + CreateBillingPlanCreditGrantResponse, + CreateCreditBundleRequestBodyExpiryType, + CreateCreditBundleRequestBodyStatus, + CreateCreditBundleResponse, + DeleteBillingPlanCreditGrantResponse, + DeleteCreditBundleResponse, + GetCreditBundleResponse, + GetSingleBillingCreditResponse, + GrantBillingCreditsToCompanyResponse, + ListBillingCreditsParams, + ListBillingCreditsResponse, + ListBillingPlanCreditGrantsParams, + ListBillingPlanCreditGrantsResponse, + ListCompanyGrantsParams, + ListCompanyGrantsRequestDir, + ListCompanyGrantsRequestOrder, + ListCompanyGrantsResponse, + ListCompanyGrantsResponseParamsDir, + ListCompanyGrantsResponseParamsOrder, + ListCreditBundlesParams, + ListCreditBundlesRequestStatus, + ListCreditBundlesResponse, + ListCreditBundlesResponseParamsStatus, + ListGrantsForCreditParams, + ListGrantsForCreditResponse, + SoftDeleteBillingCreditResponse, + UpdateBillingCreditRequestBodyBurnStrategy, + UpdateBillingCreditRequestBodyDefaultRolloverPolicy, + UpdateBillingCreditResponse, + UpdateCreditBundleDetailsRequestBodyExpiryType, + UpdateCreditBundleDetailsRequestBodyStatus, + UpdateCreditBundleDetailsResponse, + ZeroOutGrantRequestBodyReason, + ZeroOutGrantResponse, +) + +__all__ = [ + "CountBillingCreditsGrantsParams", + "CountBillingCreditsGrantsResponse", + "CountBillingCreditsParams", + "CountBillingCreditsResponse", + "CountBillingPlanCreditGrantsParams", + "CountBillingPlanCreditGrantsResponse", + "CountCreditBundlesParams", + "CountCreditBundlesRequestStatus", + "CountCreditBundlesResponse", + "CountCreditBundlesResponseParamsStatus", + "CreateBillingCreditRequestBodyBurnStrategy", + "CreateBillingCreditRequestBodyDefaultRolloverPolicy", + "CreateBillingCreditResponse", + "CreateBillingPlanCreditGrantRequestBodyResetCadence", + "CreateBillingPlanCreditGrantRequestBodyResetStart", + "CreateBillingPlanCreditGrantResponse", + "CreateCreditBundleRequestBodyExpiryType", + "CreateCreditBundleRequestBodyStatus", + "CreateCreditBundleResponse", + "DeleteBillingPlanCreditGrantResponse", + "DeleteCreditBundleResponse", + "GetCreditBundleResponse", + "GetSingleBillingCreditResponse", + "GrantBillingCreditsToCompanyResponse", + "ListBillingCreditsParams", + "ListBillingCreditsResponse", + "ListBillingPlanCreditGrantsParams", + "ListBillingPlanCreditGrantsResponse", + "ListCompanyGrantsParams", + "ListCompanyGrantsRequestDir", + "ListCompanyGrantsRequestOrder", + "ListCompanyGrantsResponse", + "ListCompanyGrantsResponseParamsDir", + "ListCompanyGrantsResponseParamsOrder", + "ListCreditBundlesParams", + "ListCreditBundlesRequestStatus", + "ListCreditBundlesResponse", + "ListCreditBundlesResponseParamsStatus", + "ListGrantsForCreditParams", + "ListGrantsForCreditResponse", + "SoftDeleteBillingCreditResponse", + "UpdateBillingCreditRequestBodyBurnStrategy", + "UpdateBillingCreditRequestBodyDefaultRolloverPolicy", + "UpdateBillingCreditResponse", + "UpdateCreditBundleDetailsRequestBodyExpiryType", + "UpdateCreditBundleDetailsRequestBodyStatus", + "UpdateCreditBundleDetailsResponse", + "ZeroOutGrantRequestBodyReason", + "ZeroOutGrantResponse", +] diff --git a/src/schematic/credits/client.py b/src/schematic/credits/client.py new file mode 100644 index 0000000..f08f634 --- /dev/null +++ b/src/schematic/credits/client.py @@ -0,0 +1,2377 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from .raw_client import AsyncRawCreditsClient, RawCreditsClient +from .types.count_billing_credits_grants_response import CountBillingCreditsGrantsResponse +from .types.count_billing_credits_response import CountBillingCreditsResponse +from .types.count_billing_plan_credit_grants_response import CountBillingPlanCreditGrantsResponse +from .types.count_credit_bundles_request_status import CountCreditBundlesRequestStatus +from .types.count_credit_bundles_response import CountCreditBundlesResponse +from .types.create_billing_credit_request_body_burn_strategy import CreateBillingCreditRequestBodyBurnStrategy +from .types.create_billing_credit_request_body_default_rollover_policy import ( + CreateBillingCreditRequestBodyDefaultRolloverPolicy, +) +from .types.create_billing_credit_response import CreateBillingCreditResponse +from .types.create_billing_plan_credit_grant_request_body_reset_cadence import ( + CreateBillingPlanCreditGrantRequestBodyResetCadence, +) +from .types.create_billing_plan_credit_grant_request_body_reset_start import ( + CreateBillingPlanCreditGrantRequestBodyResetStart, +) +from .types.create_billing_plan_credit_grant_response import CreateBillingPlanCreditGrantResponse +from .types.create_credit_bundle_request_body_expiry_type import CreateCreditBundleRequestBodyExpiryType +from .types.create_credit_bundle_request_body_status import CreateCreditBundleRequestBodyStatus +from .types.create_credit_bundle_response import CreateCreditBundleResponse +from .types.delete_billing_plan_credit_grant_response import DeleteBillingPlanCreditGrantResponse +from .types.delete_credit_bundle_response import DeleteCreditBundleResponse +from .types.get_credit_bundle_response import GetCreditBundleResponse +from .types.get_single_billing_credit_response import GetSingleBillingCreditResponse +from .types.grant_billing_credits_to_company_response import GrantBillingCreditsToCompanyResponse +from .types.list_billing_credits_response import ListBillingCreditsResponse +from .types.list_billing_plan_credit_grants_response import ListBillingPlanCreditGrantsResponse +from .types.list_company_grants_request_dir import ListCompanyGrantsRequestDir +from .types.list_company_grants_request_order import ListCompanyGrantsRequestOrder +from .types.list_company_grants_response import ListCompanyGrantsResponse +from .types.list_credit_bundles_request_status import ListCreditBundlesRequestStatus +from .types.list_credit_bundles_response import ListCreditBundlesResponse +from .types.list_grants_for_credit_response import ListGrantsForCreditResponse +from .types.soft_delete_billing_credit_response import SoftDeleteBillingCreditResponse +from .types.update_billing_credit_request_body_burn_strategy import UpdateBillingCreditRequestBodyBurnStrategy +from .types.update_billing_credit_request_body_default_rollover_policy import ( + UpdateBillingCreditRequestBodyDefaultRolloverPolicy, +) +from .types.update_billing_credit_response import UpdateBillingCreditResponse +from .types.update_credit_bundle_details_request_body_expiry_type import UpdateCreditBundleDetailsRequestBodyExpiryType +from .types.update_credit_bundle_details_request_body_status import UpdateCreditBundleDetailsRequestBodyStatus +from .types.update_credit_bundle_details_response import UpdateCreditBundleDetailsResponse +from .types.zero_out_grant_request_body_reason import ZeroOutGrantRequestBodyReason +from .types.zero_out_grant_response import ZeroOutGrantResponse + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class CreditsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawCreditsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawCreditsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawCreditsClient + """ + return self._raw_client + + def list_billing_credits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + name: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListBillingCreditsResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + name : typing.Optional[str] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListBillingCreditsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.list_billing_credits() + """ + _response = self._raw_client.list_billing_credits( + ids=ids, name=name, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + def create_billing_credit( + self, + *, + currency: str, + description: str, + name: str, + burn_strategy: typing.Optional[CreateBillingCreditRequestBodyBurnStrategy] = OMIT, + default_expiry_unit: typing.Optional[str] = OMIT, + default_expiry_unit_count: typing.Optional[int] = OMIT, + default_rollover_policy: typing.Optional[CreateBillingCreditRequestBodyDefaultRolloverPolicy] = OMIT, + icon: typing.Optional[str] = OMIT, + per_unit_price: typing.Optional[int] = OMIT, + per_unit_price_decimal: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> CreateBillingCreditResponse: + """ + Parameters + ---------- + currency : str + + description : str + + name : str + + burn_strategy : typing.Optional[CreateBillingCreditRequestBodyBurnStrategy] + + default_expiry_unit : typing.Optional[str] + + default_expiry_unit_count : typing.Optional[int] + + default_rollover_policy : typing.Optional[CreateBillingCreditRequestBodyDefaultRolloverPolicy] + + icon : typing.Optional[str] + + per_unit_price : typing.Optional[int] + + per_unit_price_decimal : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateBillingCreditResponse + Created + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.create_billing_credit( + currency="currency", + description="description", + name="name", + ) + """ + _response = self._raw_client.create_billing_credit( + currency=currency, + description=description, + name=name, + burn_strategy=burn_strategy, + default_expiry_unit=default_expiry_unit, + default_expiry_unit_count=default_expiry_unit_count, + default_rollover_policy=default_rollover_policy, + icon=icon, + per_unit_price=per_unit_price, + per_unit_price_decimal=per_unit_price_decimal, + plural_name=plural_name, + singular_name=singular_name, + request_options=request_options, + ) + return _response.data + + def get_single_billing_credit( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetSingleBillingCreditResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetSingleBillingCreditResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.get_single_billing_credit( + billing_id="billing_id", + ) + """ + _response = self._raw_client.get_single_billing_credit(billing_id, request_options=request_options) + return _response.data + + def update_billing_credit( + self, + billing_id: str, + *, + description: str, + name: str, + burn_strategy: typing.Optional[UpdateBillingCreditRequestBodyBurnStrategy] = OMIT, + default_expiry_unit: typing.Optional[typing.Literal["days"]] = OMIT, + default_expiry_unit_count: typing.Optional[int] = OMIT, + default_rollover_policy: typing.Optional[UpdateBillingCreditRequestBodyDefaultRolloverPolicy] = OMIT, + icon: typing.Optional[str] = OMIT, + per_unit_price: typing.Optional[int] = OMIT, + per_unit_price_decimal: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdateBillingCreditResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + description : str + + name : str + + burn_strategy : typing.Optional[UpdateBillingCreditRequestBodyBurnStrategy] + + default_expiry_unit : typing.Optional[typing.Literal["days"]] + + default_expiry_unit_count : typing.Optional[int] + + default_rollover_policy : typing.Optional[UpdateBillingCreditRequestBodyDefaultRolloverPolicy] + + icon : typing.Optional[str] + + per_unit_price : typing.Optional[int] + + per_unit_price_decimal : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateBillingCreditResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.update_billing_credit( + billing_id="billing_id", + description="description", + name="name", + ) + """ + _response = self._raw_client.update_billing_credit( + billing_id, + description=description, + name=name, + burn_strategy=burn_strategy, + default_expiry_unit=default_expiry_unit, + default_expiry_unit_count=default_expiry_unit_count, + default_rollover_policy=default_rollover_policy, + icon=icon, + per_unit_price=per_unit_price, + per_unit_price_decimal=per_unit_price_decimal, + plural_name=plural_name, + singular_name=singular_name, + request_options=request_options, + ) + return _response.data + + def soft_delete_billing_credit( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> SoftDeleteBillingCreditResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SoftDeleteBillingCreditResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.soft_delete_billing_credit( + billing_id="billing_id", + ) + """ + _response = self._raw_client.soft_delete_billing_credit(billing_id, request_options=request_options) + return _response.data + + def list_credit_bundles( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + credit_id: typing.Optional[str] = None, + status: typing.Optional[ListCreditBundlesRequestStatus] = None, + bundle_type: typing.Optional[typing.Literal["fixed"]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCreditBundlesResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + credit_id : typing.Optional[str] + + status : typing.Optional[ListCreditBundlesRequestStatus] + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCreditBundlesResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.list_credit_bundles() + """ + _response = self._raw_client.list_credit_bundles( + ids=ids, + credit_id=credit_id, + status=status, + bundle_type=bundle_type, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + def create_credit_bundle( + self, + *, + bundle_name: str, + credit_id: str, + currency: str, + price_per_unit: int, + bundle_type: typing.Optional[typing.Literal["fixed"]] = OMIT, + expiry_type: typing.Optional[CreateCreditBundleRequestBodyExpiryType] = OMIT, + expiry_unit: typing.Optional[typing.Literal["days"]] = OMIT, + expiry_unit_count: typing.Optional[int] = OMIT, + price_per_unit_decimal: typing.Optional[str] = OMIT, + quantity: typing.Optional[int] = OMIT, + status: typing.Optional[CreateCreditBundleRequestBodyStatus] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> CreateCreditBundleResponse: + """ + Parameters + ---------- + bundle_name : str + + credit_id : str + + currency : str + + price_per_unit : int + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + expiry_type : typing.Optional[CreateCreditBundleRequestBodyExpiryType] + + expiry_unit : typing.Optional[typing.Literal["days"]] + + expiry_unit_count : typing.Optional[int] + + price_per_unit_decimal : typing.Optional[str] + + quantity : typing.Optional[int] + + status : typing.Optional[CreateCreditBundleRequestBodyStatus] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateCreditBundleResponse + Created + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.create_credit_bundle( + bundle_name="bundle_name", + credit_id="credit_id", + currency="currency", + price_per_unit=1, + ) + """ + _response = self._raw_client.create_credit_bundle( + bundle_name=bundle_name, + credit_id=credit_id, + currency=currency, + price_per_unit=price_per_unit, + bundle_type=bundle_type, + expiry_type=expiry_type, + expiry_unit=expiry_unit, + expiry_unit_count=expiry_unit_count, + price_per_unit_decimal=price_per_unit_decimal, + quantity=quantity, + status=status, + request_options=request_options, + ) + return _response.data + + def get_credit_bundle( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetCreditBundleResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetCreditBundleResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.get_credit_bundle( + billing_id="billing_id", + ) + """ + _response = self._raw_client.get_credit_bundle(billing_id, request_options=request_options) + return _response.data + + def update_credit_bundle_details( + self, + billing_id: str, + *, + bundle_name: str, + price_per_unit: int, + expiry_type: typing.Optional[UpdateCreditBundleDetailsRequestBodyExpiryType] = OMIT, + expiry_unit_count: typing.Optional[int] = OMIT, + price_per_unit_decimal: typing.Optional[str] = OMIT, + quantity: typing.Optional[int] = OMIT, + status: typing.Optional[UpdateCreditBundleDetailsRequestBodyStatus] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdateCreditBundleDetailsResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + bundle_name : str + + price_per_unit : int + + expiry_type : typing.Optional[UpdateCreditBundleDetailsRequestBodyExpiryType] + + expiry_unit_count : typing.Optional[int] + + price_per_unit_decimal : typing.Optional[str] + + quantity : typing.Optional[int] + + status : typing.Optional[UpdateCreditBundleDetailsRequestBodyStatus] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateCreditBundleDetailsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.update_credit_bundle_details( + billing_id="billing_id", + bundle_name="bundle_name", + price_per_unit=1, + ) + """ + _response = self._raw_client.update_credit_bundle_details( + billing_id, + bundle_name=bundle_name, + price_per_unit=price_per_unit, + expiry_type=expiry_type, + expiry_unit_count=expiry_unit_count, + price_per_unit_decimal=price_per_unit_decimal, + quantity=quantity, + status=status, + request_options=request_options, + ) + return _response.data + + def delete_credit_bundle( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeleteCreditBundleResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteCreditBundleResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.delete_credit_bundle( + billing_id="billing_id", + ) + """ + _response = self._raw_client.delete_credit_bundle(billing_id, request_options=request_options) + return _response.data + + def count_credit_bundles( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + credit_id: typing.Optional[str] = None, + status: typing.Optional[CountCreditBundlesRequestStatus] = None, + bundle_type: typing.Optional[typing.Literal["fixed"]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountCreditBundlesResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + credit_id : typing.Optional[str] + + status : typing.Optional[CountCreditBundlesRequestStatus] + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountCreditBundlesResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.count_credit_bundles() + """ + _response = self._raw_client.count_credit_bundles( + ids=ids, + credit_id=credit_id, + status=status, + bundle_type=bundle_type, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + def count_billing_credits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + name: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountBillingCreditsResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + name : typing.Optional[str] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountBillingCreditsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.count_billing_credits() + """ + _response = self._raw_client.count_billing_credits( + ids=ids, name=name, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + def zero_out_grant( + self, + billing_id: str, + *, + reason: typing.Optional[ZeroOutGrantRequestBodyReason] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> ZeroOutGrantResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + reason : typing.Optional[ZeroOutGrantRequestBodyReason] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ZeroOutGrantResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.zero_out_grant( + billing_id="billing_id", + ) + """ + _response = self._raw_client.zero_out_grant(billing_id, reason=reason, request_options=request_options) + return _response.data + + def grant_billing_credits_to_company( + self, + *, + company_id: str, + credit_id: str, + quantity: int, + reason: str, + expires_at: typing.Optional[dt.datetime] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> GrantBillingCreditsToCompanyResponse: + """ + Parameters + ---------- + company_id : str + + credit_id : str + + quantity : int + + reason : str + + expires_at : typing.Optional[dt.datetime] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GrantBillingCreditsToCompanyResponse + Created + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.grant_billing_credits_to_company( + company_id="company_id", + credit_id="credit_id", + quantity=1, + reason="reason", + ) + """ + _response = self._raw_client.grant_billing_credits_to_company( + company_id=company_id, + credit_id=credit_id, + quantity=quantity, + reason=reason, + expires_at=expires_at, + request_options=request_options, + ) + return _response.data + + def list_company_grants( + self, + *, + company_id: typing.Optional[str] = None, + order: typing.Optional[ListCompanyGrantsRequestOrder] = None, + dir: typing.Optional[ListCompanyGrantsRequestDir] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCompanyGrantsResponse: + """ + Parameters + ---------- + company_id : typing.Optional[str] + + order : typing.Optional[ListCompanyGrantsRequestOrder] + + dir : typing.Optional[ListCompanyGrantsRequestDir] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCompanyGrantsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.list_company_grants() + """ + _response = self._raw_client.list_company_grants( + company_id=company_id, order=order, dir=dir, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + def count_billing_credits_grants( + self, + *, + credit_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountBillingCreditsGrantsResponse: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountBillingCreditsGrantsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.count_billing_credits_grants() + """ + _response = self._raw_client.count_billing_credits_grants( + credit_id=credit_id, ids=ids, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + def list_grants_for_credit( + self, + *, + credit_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListGrantsForCreditResponse: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListGrantsForCreditResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.list_grants_for_credit() + """ + _response = self._raw_client.list_grants_for_credit( + credit_id=credit_id, ids=ids, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + def list_billing_plan_credit_grants( + self, + *, + credit_id: typing.Optional[str] = None, + plan_id: typing.Optional[str] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListBillingPlanCreditGrantsResponse: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + plan_id : typing.Optional[str] + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListBillingPlanCreditGrantsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.list_billing_plan_credit_grants() + """ + _response = self._raw_client.list_billing_plan_credit_grants( + credit_id=credit_id, + plan_id=plan_id, + plan_ids=plan_ids, + ids=ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + def create_billing_plan_credit_grant( + self, + *, + credit_amount: int, + credit_id: str, + plan_id: str, + reset_cadence: CreateBillingPlanCreditGrantRequestBodyResetCadence, + reset_start: CreateBillingPlanCreditGrantRequestBodyResetStart, + request_options: typing.Optional[RequestOptions] = None, + ) -> CreateBillingPlanCreditGrantResponse: + """ + Parameters + ---------- + credit_amount : int + + credit_id : str + + plan_id : str + + reset_cadence : CreateBillingPlanCreditGrantRequestBodyResetCadence + + reset_start : CreateBillingPlanCreditGrantRequestBodyResetStart + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateBillingPlanCreditGrantResponse + Created + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.create_billing_plan_credit_grant( + credit_amount=1, + credit_id="credit_id", + plan_id="plan_id", + reset_cadence="monthly", + reset_start="billing_period", + ) + """ + _response = self._raw_client.create_billing_plan_credit_grant( + credit_amount=credit_amount, + credit_id=credit_id, + plan_id=plan_id, + reset_cadence=reset_cadence, + reset_start=reset_start, + request_options=request_options, + ) + return _response.data + + def delete_billing_plan_credit_grant( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeleteBillingPlanCreditGrantResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteBillingPlanCreditGrantResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.delete_billing_plan_credit_grant( + billing_id="billing_id", + ) + """ + _response = self._raw_client.delete_billing_plan_credit_grant(billing_id, request_options=request_options) + return _response.data + + def count_billing_plan_credit_grants( + self, + *, + credit_id: typing.Optional[str] = None, + plan_id: typing.Optional[str] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountBillingPlanCreditGrantsResponse: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + plan_id : typing.Optional[str] + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountBillingPlanCreditGrantsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.count_billing_plan_credit_grants() + """ + _response = self._raw_client.count_billing_plan_credit_grants( + credit_id=credit_id, + plan_id=plan_id, + plan_ids=plan_ids, + ids=ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + +class AsyncCreditsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawCreditsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawCreditsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawCreditsClient + """ + return self._raw_client + + async def list_billing_credits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + name: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListBillingCreditsResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + name : typing.Optional[str] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListBillingCreditsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.list_billing_credits() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_billing_credits( + ids=ids, name=name, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + async def create_billing_credit( + self, + *, + currency: str, + description: str, + name: str, + burn_strategy: typing.Optional[CreateBillingCreditRequestBodyBurnStrategy] = OMIT, + default_expiry_unit: typing.Optional[str] = OMIT, + default_expiry_unit_count: typing.Optional[int] = OMIT, + default_rollover_policy: typing.Optional[CreateBillingCreditRequestBodyDefaultRolloverPolicy] = OMIT, + icon: typing.Optional[str] = OMIT, + per_unit_price: typing.Optional[int] = OMIT, + per_unit_price_decimal: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> CreateBillingCreditResponse: + """ + Parameters + ---------- + currency : str + + description : str + + name : str + + burn_strategy : typing.Optional[CreateBillingCreditRequestBodyBurnStrategy] + + default_expiry_unit : typing.Optional[str] + + default_expiry_unit_count : typing.Optional[int] + + default_rollover_policy : typing.Optional[CreateBillingCreditRequestBodyDefaultRolloverPolicy] + + icon : typing.Optional[str] + + per_unit_price : typing.Optional[int] + + per_unit_price_decimal : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateBillingCreditResponse + Created + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.create_billing_credit( + currency="currency", + description="description", + name="name", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.create_billing_credit( + currency=currency, + description=description, + name=name, + burn_strategy=burn_strategy, + default_expiry_unit=default_expiry_unit, + default_expiry_unit_count=default_expiry_unit_count, + default_rollover_policy=default_rollover_policy, + icon=icon, + per_unit_price=per_unit_price, + per_unit_price_decimal=per_unit_price_decimal, + plural_name=plural_name, + singular_name=singular_name, + request_options=request_options, + ) + return _response.data + + async def get_single_billing_credit( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetSingleBillingCreditResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetSingleBillingCreditResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.get_single_billing_credit( + billing_id="billing_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_single_billing_credit(billing_id, request_options=request_options) + return _response.data + + async def update_billing_credit( + self, + billing_id: str, + *, + description: str, + name: str, + burn_strategy: typing.Optional[UpdateBillingCreditRequestBodyBurnStrategy] = OMIT, + default_expiry_unit: typing.Optional[typing.Literal["days"]] = OMIT, + default_expiry_unit_count: typing.Optional[int] = OMIT, + default_rollover_policy: typing.Optional[UpdateBillingCreditRequestBodyDefaultRolloverPolicy] = OMIT, + icon: typing.Optional[str] = OMIT, + per_unit_price: typing.Optional[int] = OMIT, + per_unit_price_decimal: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdateBillingCreditResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + description : str + + name : str + + burn_strategy : typing.Optional[UpdateBillingCreditRequestBodyBurnStrategy] + + default_expiry_unit : typing.Optional[typing.Literal["days"]] + + default_expiry_unit_count : typing.Optional[int] + + default_rollover_policy : typing.Optional[UpdateBillingCreditRequestBodyDefaultRolloverPolicy] + + icon : typing.Optional[str] + + per_unit_price : typing.Optional[int] + + per_unit_price_decimal : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateBillingCreditResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.update_billing_credit( + billing_id="billing_id", + description="description", + name="name", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update_billing_credit( + billing_id, + description=description, + name=name, + burn_strategy=burn_strategy, + default_expiry_unit=default_expiry_unit, + default_expiry_unit_count=default_expiry_unit_count, + default_rollover_policy=default_rollover_policy, + icon=icon, + per_unit_price=per_unit_price, + per_unit_price_decimal=per_unit_price_decimal, + plural_name=plural_name, + singular_name=singular_name, + request_options=request_options, + ) + return _response.data + + async def soft_delete_billing_credit( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> SoftDeleteBillingCreditResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SoftDeleteBillingCreditResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.soft_delete_billing_credit( + billing_id="billing_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.soft_delete_billing_credit(billing_id, request_options=request_options) + return _response.data + + async def list_credit_bundles( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + credit_id: typing.Optional[str] = None, + status: typing.Optional[ListCreditBundlesRequestStatus] = None, + bundle_type: typing.Optional[typing.Literal["fixed"]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCreditBundlesResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + credit_id : typing.Optional[str] + + status : typing.Optional[ListCreditBundlesRequestStatus] + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCreditBundlesResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.list_credit_bundles() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_credit_bundles( + ids=ids, + credit_id=credit_id, + status=status, + bundle_type=bundle_type, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + async def create_credit_bundle( + self, + *, + bundle_name: str, + credit_id: str, + currency: str, + price_per_unit: int, + bundle_type: typing.Optional[typing.Literal["fixed"]] = OMIT, + expiry_type: typing.Optional[CreateCreditBundleRequestBodyExpiryType] = OMIT, + expiry_unit: typing.Optional[typing.Literal["days"]] = OMIT, + expiry_unit_count: typing.Optional[int] = OMIT, + price_per_unit_decimal: typing.Optional[str] = OMIT, + quantity: typing.Optional[int] = OMIT, + status: typing.Optional[CreateCreditBundleRequestBodyStatus] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> CreateCreditBundleResponse: + """ + Parameters + ---------- + bundle_name : str + + credit_id : str + + currency : str + + price_per_unit : int + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + expiry_type : typing.Optional[CreateCreditBundleRequestBodyExpiryType] + + expiry_unit : typing.Optional[typing.Literal["days"]] + + expiry_unit_count : typing.Optional[int] + + price_per_unit_decimal : typing.Optional[str] + + quantity : typing.Optional[int] + + status : typing.Optional[CreateCreditBundleRequestBodyStatus] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateCreditBundleResponse + Created + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.create_credit_bundle( + bundle_name="bundle_name", + credit_id="credit_id", + currency="currency", + price_per_unit=1, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.create_credit_bundle( + bundle_name=bundle_name, + credit_id=credit_id, + currency=currency, + price_per_unit=price_per_unit, + bundle_type=bundle_type, + expiry_type=expiry_type, + expiry_unit=expiry_unit, + expiry_unit_count=expiry_unit_count, + price_per_unit_decimal=price_per_unit_decimal, + quantity=quantity, + status=status, + request_options=request_options, + ) + return _response.data + + async def get_credit_bundle( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetCreditBundleResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetCreditBundleResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.get_credit_bundle( + billing_id="billing_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_credit_bundle(billing_id, request_options=request_options) + return _response.data + + async def update_credit_bundle_details( + self, + billing_id: str, + *, + bundle_name: str, + price_per_unit: int, + expiry_type: typing.Optional[UpdateCreditBundleDetailsRequestBodyExpiryType] = OMIT, + expiry_unit_count: typing.Optional[int] = OMIT, + price_per_unit_decimal: typing.Optional[str] = OMIT, + quantity: typing.Optional[int] = OMIT, + status: typing.Optional[UpdateCreditBundleDetailsRequestBodyStatus] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdateCreditBundleDetailsResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + bundle_name : str + + price_per_unit : int + + expiry_type : typing.Optional[UpdateCreditBundleDetailsRequestBodyExpiryType] + + expiry_unit_count : typing.Optional[int] + + price_per_unit_decimal : typing.Optional[str] + + quantity : typing.Optional[int] + + status : typing.Optional[UpdateCreditBundleDetailsRequestBodyStatus] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateCreditBundleDetailsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.update_credit_bundle_details( + billing_id="billing_id", + bundle_name="bundle_name", + price_per_unit=1, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update_credit_bundle_details( + billing_id, + bundle_name=bundle_name, + price_per_unit=price_per_unit, + expiry_type=expiry_type, + expiry_unit_count=expiry_unit_count, + price_per_unit_decimal=price_per_unit_decimal, + quantity=quantity, + status=status, + request_options=request_options, + ) + return _response.data + + async def delete_credit_bundle( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeleteCreditBundleResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteCreditBundleResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.delete_credit_bundle( + billing_id="billing_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete_credit_bundle(billing_id, request_options=request_options) + return _response.data + + async def count_credit_bundles( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + credit_id: typing.Optional[str] = None, + status: typing.Optional[CountCreditBundlesRequestStatus] = None, + bundle_type: typing.Optional[typing.Literal["fixed"]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountCreditBundlesResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + credit_id : typing.Optional[str] + + status : typing.Optional[CountCreditBundlesRequestStatus] + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountCreditBundlesResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.count_credit_bundles() + + + asyncio.run(main()) + """ + _response = await self._raw_client.count_credit_bundles( + ids=ids, + credit_id=credit_id, + status=status, + bundle_type=bundle_type, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + async def count_billing_credits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + name: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountBillingCreditsResponse: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + name : typing.Optional[str] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountBillingCreditsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.count_billing_credits() + + + asyncio.run(main()) + """ + _response = await self._raw_client.count_billing_credits( + ids=ids, name=name, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + async def zero_out_grant( + self, + billing_id: str, + *, + reason: typing.Optional[ZeroOutGrantRequestBodyReason] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> ZeroOutGrantResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + reason : typing.Optional[ZeroOutGrantRequestBodyReason] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ZeroOutGrantResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.zero_out_grant( + billing_id="billing_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.zero_out_grant(billing_id, reason=reason, request_options=request_options) + return _response.data + + async def grant_billing_credits_to_company( + self, + *, + company_id: str, + credit_id: str, + quantity: int, + reason: str, + expires_at: typing.Optional[dt.datetime] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> GrantBillingCreditsToCompanyResponse: + """ + Parameters + ---------- + company_id : str + + credit_id : str + + quantity : int + + reason : str + + expires_at : typing.Optional[dt.datetime] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GrantBillingCreditsToCompanyResponse + Created + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.grant_billing_credits_to_company( + company_id="company_id", + credit_id="credit_id", + quantity=1, + reason="reason", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.grant_billing_credits_to_company( + company_id=company_id, + credit_id=credit_id, + quantity=quantity, + reason=reason, + expires_at=expires_at, + request_options=request_options, + ) + return _response.data + + async def list_company_grants( + self, + *, + company_id: typing.Optional[str] = None, + order: typing.Optional[ListCompanyGrantsRequestOrder] = None, + dir: typing.Optional[ListCompanyGrantsRequestDir] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCompanyGrantsResponse: + """ + Parameters + ---------- + company_id : typing.Optional[str] + + order : typing.Optional[ListCompanyGrantsRequestOrder] + + dir : typing.Optional[ListCompanyGrantsRequestDir] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCompanyGrantsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.list_company_grants() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_company_grants( + company_id=company_id, order=order, dir=dir, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + async def count_billing_credits_grants( + self, + *, + credit_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountBillingCreditsGrantsResponse: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountBillingCreditsGrantsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.count_billing_credits_grants() + + + asyncio.run(main()) + """ + _response = await self._raw_client.count_billing_credits_grants( + credit_id=credit_id, ids=ids, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + async def list_grants_for_credit( + self, + *, + credit_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListGrantsForCreditResponse: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListGrantsForCreditResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.list_grants_for_credit() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_grants_for_credit( + credit_id=credit_id, ids=ids, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + async def list_billing_plan_credit_grants( + self, + *, + credit_id: typing.Optional[str] = None, + plan_id: typing.Optional[str] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListBillingPlanCreditGrantsResponse: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + plan_id : typing.Optional[str] + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListBillingPlanCreditGrantsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.list_billing_plan_credit_grants() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_billing_plan_credit_grants( + credit_id=credit_id, + plan_id=plan_id, + plan_ids=plan_ids, + ids=ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + async def create_billing_plan_credit_grant( + self, + *, + credit_amount: int, + credit_id: str, + plan_id: str, + reset_cadence: CreateBillingPlanCreditGrantRequestBodyResetCadence, + reset_start: CreateBillingPlanCreditGrantRequestBodyResetStart, + request_options: typing.Optional[RequestOptions] = None, + ) -> CreateBillingPlanCreditGrantResponse: + """ + Parameters + ---------- + credit_amount : int + + credit_id : str + + plan_id : str + + reset_cadence : CreateBillingPlanCreditGrantRequestBodyResetCadence + + reset_start : CreateBillingPlanCreditGrantRequestBodyResetStart + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateBillingPlanCreditGrantResponse + Created + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.create_billing_plan_credit_grant( + credit_amount=1, + credit_id="credit_id", + plan_id="plan_id", + reset_cadence="monthly", + reset_start="billing_period", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.create_billing_plan_credit_grant( + credit_amount=credit_amount, + credit_id=credit_id, + plan_id=plan_id, + reset_cadence=reset_cadence, + reset_start=reset_start, + request_options=request_options, + ) + return _response.data + + async def delete_billing_plan_credit_grant( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeleteBillingPlanCreditGrantResponse: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteBillingPlanCreditGrantResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.delete_billing_plan_credit_grant( + billing_id="billing_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete_billing_plan_credit_grant(billing_id, request_options=request_options) + return _response.data + + async def count_billing_plan_credit_grants( + self, + *, + credit_id: typing.Optional[str] = None, + plan_id: typing.Optional[str] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> CountBillingPlanCreditGrantsResponse: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + plan_id : typing.Optional[str] + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CountBillingPlanCreditGrantsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.count_billing_plan_credit_grants() + + + asyncio.run(main()) + """ + _response = await self._raw_client.count_billing_plan_credit_grants( + credit_id=credit_id, + plan_id=plan_id, + plan_ids=plan_ids, + ids=ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data diff --git a/src/schematic/credits/raw_client.py b/src/schematic/credits/raw_client.py new file mode 100644 index 0000000..4bca2c7 --- /dev/null +++ b/src/schematic/credits/raw_client.py @@ -0,0 +1,4987 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError as core_api_error_ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.jsonable_encoder import jsonable_encoder +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions +from ..errors.bad_request_error import BadRequestError +from ..errors.forbidden_error import ForbiddenError +from ..errors.internal_server_error import InternalServerError +from ..errors.not_found_error import NotFoundError +from ..errors.unauthorized_error import UnauthorizedError +from ..types.api_error import ApiError as types_api_error_ApiError +from .types.count_billing_credits_grants_response import CountBillingCreditsGrantsResponse +from .types.count_billing_credits_response import CountBillingCreditsResponse +from .types.count_billing_plan_credit_grants_response import CountBillingPlanCreditGrantsResponse +from .types.count_credit_bundles_request_status import CountCreditBundlesRequestStatus +from .types.count_credit_bundles_response import CountCreditBundlesResponse +from .types.create_billing_credit_request_body_burn_strategy import CreateBillingCreditRequestBodyBurnStrategy +from .types.create_billing_credit_request_body_default_rollover_policy import ( + CreateBillingCreditRequestBodyDefaultRolloverPolicy, +) +from .types.create_billing_credit_response import CreateBillingCreditResponse +from .types.create_billing_plan_credit_grant_request_body_reset_cadence import ( + CreateBillingPlanCreditGrantRequestBodyResetCadence, +) +from .types.create_billing_plan_credit_grant_request_body_reset_start import ( + CreateBillingPlanCreditGrantRequestBodyResetStart, +) +from .types.create_billing_plan_credit_grant_response import CreateBillingPlanCreditGrantResponse +from .types.create_credit_bundle_request_body_expiry_type import CreateCreditBundleRequestBodyExpiryType +from .types.create_credit_bundle_request_body_status import CreateCreditBundleRequestBodyStatus +from .types.create_credit_bundle_response import CreateCreditBundleResponse +from .types.delete_billing_plan_credit_grant_response import DeleteBillingPlanCreditGrantResponse +from .types.delete_credit_bundle_response import DeleteCreditBundleResponse +from .types.get_credit_bundle_response import GetCreditBundleResponse +from .types.get_single_billing_credit_response import GetSingleBillingCreditResponse +from .types.grant_billing_credits_to_company_response import GrantBillingCreditsToCompanyResponse +from .types.list_billing_credits_response import ListBillingCreditsResponse +from .types.list_billing_plan_credit_grants_response import ListBillingPlanCreditGrantsResponse +from .types.list_company_grants_request_dir import ListCompanyGrantsRequestDir +from .types.list_company_grants_request_order import ListCompanyGrantsRequestOrder +from .types.list_company_grants_response import ListCompanyGrantsResponse +from .types.list_credit_bundles_request_status import ListCreditBundlesRequestStatus +from .types.list_credit_bundles_response import ListCreditBundlesResponse +from .types.list_grants_for_credit_response import ListGrantsForCreditResponse +from .types.soft_delete_billing_credit_response import SoftDeleteBillingCreditResponse +from .types.update_billing_credit_request_body_burn_strategy import UpdateBillingCreditRequestBodyBurnStrategy +from .types.update_billing_credit_request_body_default_rollover_policy import ( + UpdateBillingCreditRequestBodyDefaultRolloverPolicy, +) +from .types.update_billing_credit_response import UpdateBillingCreditResponse +from .types.update_credit_bundle_details_request_body_expiry_type import UpdateCreditBundleDetailsRequestBodyExpiryType +from .types.update_credit_bundle_details_request_body_status import UpdateCreditBundleDetailsRequestBodyStatus +from .types.update_credit_bundle_details_response import UpdateCreditBundleDetailsResponse +from .types.zero_out_grant_request_body_reason import ZeroOutGrantRequestBodyReason +from .types.zero_out_grant_response import ZeroOutGrantResponse + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class RawCreditsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list_billing_credits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + name: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListBillingCreditsResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + name : typing.Optional[str] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListBillingCreditsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits", + method="GET", + params={ + "ids": ids, + "name": name, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListBillingCreditsResponse, + parse_obj_as( + type_=ListBillingCreditsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def create_billing_credit( + self, + *, + currency: str, + description: str, + name: str, + burn_strategy: typing.Optional[CreateBillingCreditRequestBodyBurnStrategy] = OMIT, + default_expiry_unit: typing.Optional[str] = OMIT, + default_expiry_unit_count: typing.Optional[int] = OMIT, + default_rollover_policy: typing.Optional[CreateBillingCreditRequestBodyDefaultRolloverPolicy] = OMIT, + icon: typing.Optional[str] = OMIT, + per_unit_price: typing.Optional[int] = OMIT, + per_unit_price_decimal: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CreateBillingCreditResponse]: + """ + Parameters + ---------- + currency : str + + description : str + + name : str + + burn_strategy : typing.Optional[CreateBillingCreditRequestBodyBurnStrategy] + + default_expiry_unit : typing.Optional[str] + + default_expiry_unit_count : typing.Optional[int] + + default_rollover_policy : typing.Optional[CreateBillingCreditRequestBodyDefaultRolloverPolicy] + + icon : typing.Optional[str] + + per_unit_price : typing.Optional[int] + + per_unit_price_decimal : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CreateBillingCreditResponse] + Created + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits", + method="POST", + json={ + "burn_strategy": burn_strategy, + "currency": currency, + "default_expiry_unit": default_expiry_unit, + "default_expiry_unit_count": default_expiry_unit_count, + "default_rollover_policy": default_rollover_policy, + "description": description, + "icon": icon, + "name": name, + "per_unit_price": per_unit_price, + "per_unit_price_decimal": per_unit_price_decimal, + "plural_name": plural_name, + "singular_name": singular_name, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateBillingCreditResponse, + parse_obj_as( + type_=CreateBillingCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_single_billing_credit( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetSingleBillingCreditResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetSingleBillingCreditResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/credits/{jsonable_encoder(billing_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetSingleBillingCreditResponse, + parse_obj_as( + type_=GetSingleBillingCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def update_billing_credit( + self, + billing_id: str, + *, + description: str, + name: str, + burn_strategy: typing.Optional[UpdateBillingCreditRequestBodyBurnStrategy] = OMIT, + default_expiry_unit: typing.Optional[typing.Literal["days"]] = OMIT, + default_expiry_unit_count: typing.Optional[int] = OMIT, + default_rollover_policy: typing.Optional[UpdateBillingCreditRequestBodyDefaultRolloverPolicy] = OMIT, + icon: typing.Optional[str] = OMIT, + per_unit_price: typing.Optional[int] = OMIT, + per_unit_price_decimal: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[UpdateBillingCreditResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + description : str + + name : str + + burn_strategy : typing.Optional[UpdateBillingCreditRequestBodyBurnStrategy] + + default_expiry_unit : typing.Optional[typing.Literal["days"]] + + default_expiry_unit_count : typing.Optional[int] + + default_rollover_policy : typing.Optional[UpdateBillingCreditRequestBodyDefaultRolloverPolicy] + + icon : typing.Optional[str] + + per_unit_price : typing.Optional[int] + + per_unit_price_decimal : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[UpdateBillingCreditResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/credits/{jsonable_encoder(billing_id)}", + method="PUT", + json={ + "burn_strategy": burn_strategy, + "default_expiry_unit": default_expiry_unit, + "default_expiry_unit_count": default_expiry_unit_count, + "default_rollover_policy": default_rollover_policy, + "description": description, + "icon": icon, + "name": name, + "per_unit_price": per_unit_price, + "per_unit_price_decimal": per_unit_price_decimal, + "plural_name": plural_name, + "singular_name": singular_name, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateBillingCreditResponse, + parse_obj_as( + type_=UpdateBillingCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def soft_delete_billing_credit( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[SoftDeleteBillingCreditResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SoftDeleteBillingCreditResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/credits/{jsonable_encoder(billing_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + SoftDeleteBillingCreditResponse, + parse_obj_as( + type_=SoftDeleteBillingCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def list_credit_bundles( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + credit_id: typing.Optional[str] = None, + status: typing.Optional[ListCreditBundlesRequestStatus] = None, + bundle_type: typing.Optional[typing.Literal["fixed"]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListCreditBundlesResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + credit_id : typing.Optional[str] + + status : typing.Optional[ListCreditBundlesRequestStatus] + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListCreditBundlesResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/bundles", + method="GET", + params={ + "ids": ids, + "credit_id": credit_id, + "status": status, + "bundle_type": bundle_type, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCreditBundlesResponse, + parse_obj_as( + type_=ListCreditBundlesResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def create_credit_bundle( + self, + *, + bundle_name: str, + credit_id: str, + currency: str, + price_per_unit: int, + bundle_type: typing.Optional[typing.Literal["fixed"]] = OMIT, + expiry_type: typing.Optional[CreateCreditBundleRequestBodyExpiryType] = OMIT, + expiry_unit: typing.Optional[typing.Literal["days"]] = OMIT, + expiry_unit_count: typing.Optional[int] = OMIT, + price_per_unit_decimal: typing.Optional[str] = OMIT, + quantity: typing.Optional[int] = OMIT, + status: typing.Optional[CreateCreditBundleRequestBodyStatus] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CreateCreditBundleResponse]: + """ + Parameters + ---------- + bundle_name : str + + credit_id : str + + currency : str + + price_per_unit : int + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + expiry_type : typing.Optional[CreateCreditBundleRequestBodyExpiryType] + + expiry_unit : typing.Optional[typing.Literal["days"]] + + expiry_unit_count : typing.Optional[int] + + price_per_unit_decimal : typing.Optional[str] + + quantity : typing.Optional[int] + + status : typing.Optional[CreateCreditBundleRequestBodyStatus] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CreateCreditBundleResponse] + Created + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/bundles", + method="POST", + json={ + "bundle_name": bundle_name, + "bundle_type": bundle_type, + "credit_id": credit_id, + "currency": currency, + "expiry_type": expiry_type, + "expiry_unit": expiry_unit, + "expiry_unit_count": expiry_unit_count, + "price_per_unit": price_per_unit, + "price_per_unit_decimal": price_per_unit_decimal, + "quantity": quantity, + "status": status, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateCreditBundleResponse, + parse_obj_as( + type_=CreateCreditBundleResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_credit_bundle( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetCreditBundleResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetCreditBundleResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetCreditBundleResponse, + parse_obj_as( + type_=GetCreditBundleResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def update_credit_bundle_details( + self, + billing_id: str, + *, + bundle_name: str, + price_per_unit: int, + expiry_type: typing.Optional[UpdateCreditBundleDetailsRequestBodyExpiryType] = OMIT, + expiry_unit_count: typing.Optional[int] = OMIT, + price_per_unit_decimal: typing.Optional[str] = OMIT, + quantity: typing.Optional[int] = OMIT, + status: typing.Optional[UpdateCreditBundleDetailsRequestBodyStatus] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[UpdateCreditBundleDetailsResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + bundle_name : str + + price_per_unit : int + + expiry_type : typing.Optional[UpdateCreditBundleDetailsRequestBodyExpiryType] + + expiry_unit_count : typing.Optional[int] + + price_per_unit_decimal : typing.Optional[str] + + quantity : typing.Optional[int] + + status : typing.Optional[UpdateCreditBundleDetailsRequestBodyStatus] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[UpdateCreditBundleDetailsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + method="PUT", + json={ + "bundle_name": bundle_name, + "expiry_type": expiry_type, + "expiry_unit_count": expiry_unit_count, + "price_per_unit": price_per_unit, + "price_per_unit_decimal": price_per_unit_decimal, + "quantity": quantity, + "status": status, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateCreditBundleDetailsResponse, + parse_obj_as( + type_=UpdateCreditBundleDetailsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def delete_credit_bundle( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeleteCreditBundleResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[DeleteCreditBundleResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteCreditBundleResponse, + parse_obj_as( + type_=DeleteCreditBundleResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def count_credit_bundles( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + credit_id: typing.Optional[str] = None, + status: typing.Optional[CountCreditBundlesRequestStatus] = None, + bundle_type: typing.Optional[typing.Literal["fixed"]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CountCreditBundlesResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + credit_id : typing.Optional[str] + + status : typing.Optional[CountCreditBundlesRequestStatus] + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CountCreditBundlesResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/bundles/count", + method="GET", + params={ + "ids": ids, + "credit_id": credit_id, + "status": status, + "bundle_type": bundle_type, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountCreditBundlesResponse, + parse_obj_as( + type_=CountCreditBundlesResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def count_billing_credits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + name: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CountBillingCreditsResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + name : typing.Optional[str] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CountBillingCreditsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/count", + method="GET", + params={ + "ids": ids, + "name": name, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountBillingCreditsResponse, + parse_obj_as( + type_=CountBillingCreditsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def zero_out_grant( + self, + billing_id: str, + *, + reason: typing.Optional[ZeroOutGrantRequestBodyReason] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ZeroOutGrantResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + reason : typing.Optional[ZeroOutGrantRequestBodyReason] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ZeroOutGrantResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/credits/grants/{jsonable_encoder(billing_id)}/zero-out", + method="PUT", + json={ + "reason": reason, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ZeroOutGrantResponse, + parse_obj_as( + type_=ZeroOutGrantResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def grant_billing_credits_to_company( + self, + *, + company_id: str, + credit_id: str, + quantity: int, + reason: str, + expires_at: typing.Optional[dt.datetime] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[GrantBillingCreditsToCompanyResponse]: + """ + Parameters + ---------- + company_id : str + + credit_id : str + + quantity : int + + reason : str + + expires_at : typing.Optional[dt.datetime] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GrantBillingCreditsToCompanyResponse] + Created + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/grants/company", + method="POST", + json={ + "company_id": company_id, + "credit_id": credit_id, + "expires_at": expires_at, + "quantity": quantity, + "reason": reason, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GrantBillingCreditsToCompanyResponse, + parse_obj_as( + type_=GrantBillingCreditsToCompanyResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def list_company_grants( + self, + *, + company_id: typing.Optional[str] = None, + order: typing.Optional[ListCompanyGrantsRequestOrder] = None, + dir: typing.Optional[ListCompanyGrantsRequestDir] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListCompanyGrantsResponse]: + """ + Parameters + ---------- + company_id : typing.Optional[str] + + order : typing.Optional[ListCompanyGrantsRequestOrder] + + dir : typing.Optional[ListCompanyGrantsRequestDir] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListCompanyGrantsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/grants/company/list", + method="GET", + params={ + "company_id": company_id, + "order": order, + "dir": dir, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCompanyGrantsResponse, + parse_obj_as( + type_=ListCompanyGrantsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def count_billing_credits_grants( + self, + *, + credit_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CountBillingCreditsGrantsResponse]: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CountBillingCreditsGrantsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/grants/count", + method="GET", + params={ + "credit_id": credit_id, + "ids": ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountBillingCreditsGrantsResponse, + parse_obj_as( + type_=CountBillingCreditsGrantsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def list_grants_for_credit( + self, + *, + credit_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListGrantsForCreditResponse]: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListGrantsForCreditResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/grants/list", + method="GET", + params={ + "credit_id": credit_id, + "ids": ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListGrantsForCreditResponse, + parse_obj_as( + type_=ListGrantsForCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def list_billing_plan_credit_grants( + self, + *, + credit_id: typing.Optional[str] = None, + plan_id: typing.Optional[str] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListBillingPlanCreditGrantsResponse]: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + plan_id : typing.Optional[str] + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListBillingPlanCreditGrantsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/plan-grants", + method="GET", + params={ + "credit_id": credit_id, + "plan_id": plan_id, + "plan_ids": plan_ids, + "ids": ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListBillingPlanCreditGrantsResponse, + parse_obj_as( + type_=ListBillingPlanCreditGrantsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def create_billing_plan_credit_grant( + self, + *, + credit_amount: int, + credit_id: str, + plan_id: str, + reset_cadence: CreateBillingPlanCreditGrantRequestBodyResetCadence, + reset_start: CreateBillingPlanCreditGrantRequestBodyResetStart, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CreateBillingPlanCreditGrantResponse]: + """ + Parameters + ---------- + credit_amount : int + + credit_id : str + + plan_id : str + + reset_cadence : CreateBillingPlanCreditGrantRequestBodyResetCadence + + reset_start : CreateBillingPlanCreditGrantRequestBodyResetStart + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CreateBillingPlanCreditGrantResponse] + Created + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/plan-grants", + method="POST", + json={ + "credit_amount": credit_amount, + "credit_id": credit_id, + "plan_id": plan_id, + "reset_cadence": reset_cadence, + "reset_start": reset_start, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateBillingPlanCreditGrantResponse, + parse_obj_as( + type_=CreateBillingPlanCreditGrantResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def delete_billing_plan_credit_grant( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeleteBillingPlanCreditGrantResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[DeleteBillingPlanCreditGrantResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"billing/credits/plan-grants/{jsonable_encoder(billing_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteBillingPlanCreditGrantResponse, + parse_obj_as( + type_=DeleteBillingPlanCreditGrantResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def count_billing_plan_credit_grants( + self, + *, + credit_id: typing.Optional[str] = None, + plan_id: typing.Optional[str] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CountBillingPlanCreditGrantsResponse]: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + plan_id : typing.Optional[str] + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CountBillingPlanCreditGrantsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/plan-grants/count", + method="GET", + params={ + "credit_id": credit_id, + "plan_id": plan_id, + "plan_ids": plan_ids, + "ids": ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountBillingPlanCreditGrantsResponse, + parse_obj_as( + type_=CountBillingPlanCreditGrantsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + +class AsyncRawCreditsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list_billing_credits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + name: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListBillingCreditsResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + name : typing.Optional[str] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListBillingCreditsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits", + method="GET", + params={ + "ids": ids, + "name": name, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListBillingCreditsResponse, + parse_obj_as( + type_=ListBillingCreditsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def create_billing_credit( + self, + *, + currency: str, + description: str, + name: str, + burn_strategy: typing.Optional[CreateBillingCreditRequestBodyBurnStrategy] = OMIT, + default_expiry_unit: typing.Optional[str] = OMIT, + default_expiry_unit_count: typing.Optional[int] = OMIT, + default_rollover_policy: typing.Optional[CreateBillingCreditRequestBodyDefaultRolloverPolicy] = OMIT, + icon: typing.Optional[str] = OMIT, + per_unit_price: typing.Optional[int] = OMIT, + per_unit_price_decimal: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CreateBillingCreditResponse]: + """ + Parameters + ---------- + currency : str + + description : str + + name : str + + burn_strategy : typing.Optional[CreateBillingCreditRequestBodyBurnStrategy] + + default_expiry_unit : typing.Optional[str] + + default_expiry_unit_count : typing.Optional[int] + + default_rollover_policy : typing.Optional[CreateBillingCreditRequestBodyDefaultRolloverPolicy] + + icon : typing.Optional[str] + + per_unit_price : typing.Optional[int] + + per_unit_price_decimal : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CreateBillingCreditResponse] + Created + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits", + method="POST", + json={ + "burn_strategy": burn_strategy, + "currency": currency, + "default_expiry_unit": default_expiry_unit, + "default_expiry_unit_count": default_expiry_unit_count, + "default_rollover_policy": default_rollover_policy, + "description": description, + "icon": icon, + "name": name, + "per_unit_price": per_unit_price, + "per_unit_price_decimal": per_unit_price_decimal, + "plural_name": plural_name, + "singular_name": singular_name, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateBillingCreditResponse, + parse_obj_as( + type_=CreateBillingCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_single_billing_credit( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetSingleBillingCreditResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetSingleBillingCreditResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/credits/{jsonable_encoder(billing_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetSingleBillingCreditResponse, + parse_obj_as( + type_=GetSingleBillingCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def update_billing_credit( + self, + billing_id: str, + *, + description: str, + name: str, + burn_strategy: typing.Optional[UpdateBillingCreditRequestBodyBurnStrategy] = OMIT, + default_expiry_unit: typing.Optional[typing.Literal["days"]] = OMIT, + default_expiry_unit_count: typing.Optional[int] = OMIT, + default_rollover_policy: typing.Optional[UpdateBillingCreditRequestBodyDefaultRolloverPolicy] = OMIT, + icon: typing.Optional[str] = OMIT, + per_unit_price: typing.Optional[int] = OMIT, + per_unit_price_decimal: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[UpdateBillingCreditResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + description : str + + name : str + + burn_strategy : typing.Optional[UpdateBillingCreditRequestBodyBurnStrategy] + + default_expiry_unit : typing.Optional[typing.Literal["days"]] + + default_expiry_unit_count : typing.Optional[int] + + default_rollover_policy : typing.Optional[UpdateBillingCreditRequestBodyDefaultRolloverPolicy] + + icon : typing.Optional[str] + + per_unit_price : typing.Optional[int] + + per_unit_price_decimal : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[UpdateBillingCreditResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/credits/{jsonable_encoder(billing_id)}", + method="PUT", + json={ + "burn_strategy": burn_strategy, + "default_expiry_unit": default_expiry_unit, + "default_expiry_unit_count": default_expiry_unit_count, + "default_rollover_policy": default_rollover_policy, + "description": description, + "icon": icon, + "name": name, + "per_unit_price": per_unit_price, + "per_unit_price_decimal": per_unit_price_decimal, + "plural_name": plural_name, + "singular_name": singular_name, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateBillingCreditResponse, + parse_obj_as( + type_=UpdateBillingCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def soft_delete_billing_credit( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[SoftDeleteBillingCreditResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SoftDeleteBillingCreditResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/credits/{jsonable_encoder(billing_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + SoftDeleteBillingCreditResponse, + parse_obj_as( + type_=SoftDeleteBillingCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def list_credit_bundles( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + credit_id: typing.Optional[str] = None, + status: typing.Optional[ListCreditBundlesRequestStatus] = None, + bundle_type: typing.Optional[typing.Literal["fixed"]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListCreditBundlesResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + credit_id : typing.Optional[str] + + status : typing.Optional[ListCreditBundlesRequestStatus] + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListCreditBundlesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/bundles", + method="GET", + params={ + "ids": ids, + "credit_id": credit_id, + "status": status, + "bundle_type": bundle_type, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCreditBundlesResponse, + parse_obj_as( + type_=ListCreditBundlesResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def create_credit_bundle( + self, + *, + bundle_name: str, + credit_id: str, + currency: str, + price_per_unit: int, + bundle_type: typing.Optional[typing.Literal["fixed"]] = OMIT, + expiry_type: typing.Optional[CreateCreditBundleRequestBodyExpiryType] = OMIT, + expiry_unit: typing.Optional[typing.Literal["days"]] = OMIT, + expiry_unit_count: typing.Optional[int] = OMIT, + price_per_unit_decimal: typing.Optional[str] = OMIT, + quantity: typing.Optional[int] = OMIT, + status: typing.Optional[CreateCreditBundleRequestBodyStatus] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CreateCreditBundleResponse]: + """ + Parameters + ---------- + bundle_name : str + + credit_id : str + + currency : str + + price_per_unit : int + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + expiry_type : typing.Optional[CreateCreditBundleRequestBodyExpiryType] + + expiry_unit : typing.Optional[typing.Literal["days"]] + + expiry_unit_count : typing.Optional[int] + + price_per_unit_decimal : typing.Optional[str] + + quantity : typing.Optional[int] + + status : typing.Optional[CreateCreditBundleRequestBodyStatus] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CreateCreditBundleResponse] + Created + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/bundles", + method="POST", + json={ + "bundle_name": bundle_name, + "bundle_type": bundle_type, + "credit_id": credit_id, + "currency": currency, + "expiry_type": expiry_type, + "expiry_unit": expiry_unit, + "expiry_unit_count": expiry_unit_count, + "price_per_unit": price_per_unit, + "price_per_unit_decimal": price_per_unit_decimal, + "quantity": quantity, + "status": status, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateCreditBundleResponse, + parse_obj_as( + type_=CreateCreditBundleResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_credit_bundle( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetCreditBundleResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetCreditBundleResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetCreditBundleResponse, + parse_obj_as( + type_=GetCreditBundleResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def update_credit_bundle_details( + self, + billing_id: str, + *, + bundle_name: str, + price_per_unit: int, + expiry_type: typing.Optional[UpdateCreditBundleDetailsRequestBodyExpiryType] = OMIT, + expiry_unit_count: typing.Optional[int] = OMIT, + price_per_unit_decimal: typing.Optional[str] = OMIT, + quantity: typing.Optional[int] = OMIT, + status: typing.Optional[UpdateCreditBundleDetailsRequestBodyStatus] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[UpdateCreditBundleDetailsResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + bundle_name : str + + price_per_unit : int + + expiry_type : typing.Optional[UpdateCreditBundleDetailsRequestBodyExpiryType] + + expiry_unit_count : typing.Optional[int] + + price_per_unit_decimal : typing.Optional[str] + + quantity : typing.Optional[int] + + status : typing.Optional[UpdateCreditBundleDetailsRequestBodyStatus] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[UpdateCreditBundleDetailsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + method="PUT", + json={ + "bundle_name": bundle_name, + "expiry_type": expiry_type, + "expiry_unit_count": expiry_unit_count, + "price_per_unit": price_per_unit, + "price_per_unit_decimal": price_per_unit_decimal, + "quantity": quantity, + "status": status, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateCreditBundleDetailsResponse, + parse_obj_as( + type_=UpdateCreditBundleDetailsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def delete_credit_bundle( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[DeleteCreditBundleResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[DeleteCreditBundleResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteCreditBundleResponse, + parse_obj_as( + type_=DeleteCreditBundleResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def count_credit_bundles( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + credit_id: typing.Optional[str] = None, + status: typing.Optional[CountCreditBundlesRequestStatus] = None, + bundle_type: typing.Optional[typing.Literal["fixed"]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CountCreditBundlesResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + credit_id : typing.Optional[str] + + status : typing.Optional[CountCreditBundlesRequestStatus] + + bundle_type : typing.Optional[typing.Literal["fixed"]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CountCreditBundlesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/bundles/count", + method="GET", + params={ + "ids": ids, + "credit_id": credit_id, + "status": status, + "bundle_type": bundle_type, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountCreditBundlesResponse, + parse_obj_as( + type_=CountCreditBundlesResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def count_billing_credits( + self, + *, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + name: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CountBillingCreditsResponse]: + """ + Parameters + ---------- + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + name : typing.Optional[str] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CountBillingCreditsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/count", + method="GET", + params={ + "ids": ids, + "name": name, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountBillingCreditsResponse, + parse_obj_as( + type_=CountBillingCreditsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def zero_out_grant( + self, + billing_id: str, + *, + reason: typing.Optional[ZeroOutGrantRequestBodyReason] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ZeroOutGrantResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + reason : typing.Optional[ZeroOutGrantRequestBodyReason] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ZeroOutGrantResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/credits/grants/{jsonable_encoder(billing_id)}/zero-out", + method="PUT", + json={ + "reason": reason, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ZeroOutGrantResponse, + parse_obj_as( + type_=ZeroOutGrantResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def grant_billing_credits_to_company( + self, + *, + company_id: str, + credit_id: str, + quantity: int, + reason: str, + expires_at: typing.Optional[dt.datetime] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[GrantBillingCreditsToCompanyResponse]: + """ + Parameters + ---------- + company_id : str + + credit_id : str + + quantity : int + + reason : str + + expires_at : typing.Optional[dt.datetime] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GrantBillingCreditsToCompanyResponse] + Created + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/grants/company", + method="POST", + json={ + "company_id": company_id, + "credit_id": credit_id, + "expires_at": expires_at, + "quantity": quantity, + "reason": reason, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GrantBillingCreditsToCompanyResponse, + parse_obj_as( + type_=GrantBillingCreditsToCompanyResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def list_company_grants( + self, + *, + company_id: typing.Optional[str] = None, + order: typing.Optional[ListCompanyGrantsRequestOrder] = None, + dir: typing.Optional[ListCompanyGrantsRequestDir] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListCompanyGrantsResponse]: + """ + Parameters + ---------- + company_id : typing.Optional[str] + + order : typing.Optional[ListCompanyGrantsRequestOrder] + + dir : typing.Optional[ListCompanyGrantsRequestDir] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListCompanyGrantsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/grants/company/list", + method="GET", + params={ + "company_id": company_id, + "order": order, + "dir": dir, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCompanyGrantsResponse, + parse_obj_as( + type_=ListCompanyGrantsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def count_billing_credits_grants( + self, + *, + credit_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CountBillingCreditsGrantsResponse]: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CountBillingCreditsGrantsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/grants/count", + method="GET", + params={ + "credit_id": credit_id, + "ids": ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountBillingCreditsGrantsResponse, + parse_obj_as( + type_=CountBillingCreditsGrantsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def list_grants_for_credit( + self, + *, + credit_id: typing.Optional[str] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListGrantsForCreditResponse]: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListGrantsForCreditResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/grants/list", + method="GET", + params={ + "credit_id": credit_id, + "ids": ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListGrantsForCreditResponse, + parse_obj_as( + type_=ListGrantsForCreditResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def list_billing_plan_credit_grants( + self, + *, + credit_id: typing.Optional[str] = None, + plan_id: typing.Optional[str] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListBillingPlanCreditGrantsResponse]: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + plan_id : typing.Optional[str] + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListBillingPlanCreditGrantsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/plan-grants", + method="GET", + params={ + "credit_id": credit_id, + "plan_id": plan_id, + "plan_ids": plan_ids, + "ids": ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListBillingPlanCreditGrantsResponse, + parse_obj_as( + type_=ListBillingPlanCreditGrantsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def create_billing_plan_credit_grant( + self, + *, + credit_amount: int, + credit_id: str, + plan_id: str, + reset_cadence: CreateBillingPlanCreditGrantRequestBodyResetCadence, + reset_start: CreateBillingPlanCreditGrantRequestBodyResetStart, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CreateBillingPlanCreditGrantResponse]: + """ + Parameters + ---------- + credit_amount : int + + credit_id : str + + plan_id : str + + reset_cadence : CreateBillingPlanCreditGrantRequestBodyResetCadence + + reset_start : CreateBillingPlanCreditGrantRequestBodyResetStart + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CreateBillingPlanCreditGrantResponse] + Created + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/plan-grants", + method="POST", + json={ + "credit_amount": credit_amount, + "credit_id": credit_id, + "plan_id": plan_id, + "reset_cadence": reset_cadence, + "reset_start": reset_start, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateBillingPlanCreditGrantResponse, + parse_obj_as( + type_=CreateBillingPlanCreditGrantResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def delete_billing_plan_credit_grant( + self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[DeleteBillingPlanCreditGrantResponse]: + """ + Parameters + ---------- + billing_id : str + billing_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[DeleteBillingPlanCreditGrantResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"billing/credits/plan-grants/{jsonable_encoder(billing_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteBillingPlanCreditGrantResponse, + parse_obj_as( + type_=DeleteBillingPlanCreditGrantResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def count_billing_plan_credit_grants( + self, + *, + credit_id: typing.Optional[str] = None, + plan_id: typing.Optional[str] = None, + plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CountBillingPlanCreditGrantsResponse]: + """ + Parameters + ---------- + credit_id : typing.Optional[str] + + plan_id : typing.Optional[str] + + plan_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CountBillingPlanCreditGrantsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/plan-grants/count", + method="GET", + params={ + "credit_id": credit_id, + "plan_id": plan_id, + "plan_ids": plan_ids, + "ids": ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CountBillingPlanCreditGrantsResponse, + parse_obj_as( + type_=CountBillingPlanCreditGrantsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=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( + headers=dict(_response.headers), + body=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, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) diff --git a/src/schematic/credits/types/__init__.py b/src/schematic/credits/types/__init__.py new file mode 100644 index 0000000..c371f6b --- /dev/null +++ b/src/schematic/credits/types/__init__.py @@ -0,0 +1,111 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + +from .count_billing_credits_grants_params import CountBillingCreditsGrantsParams +from .count_billing_credits_grants_response import CountBillingCreditsGrantsResponse +from .count_billing_credits_params import CountBillingCreditsParams +from .count_billing_credits_response import CountBillingCreditsResponse +from .count_billing_plan_credit_grants_params import CountBillingPlanCreditGrantsParams +from .count_billing_plan_credit_grants_response import CountBillingPlanCreditGrantsResponse +from .count_credit_bundles_params import CountCreditBundlesParams +from .count_credit_bundles_request_status import CountCreditBundlesRequestStatus +from .count_credit_bundles_response import CountCreditBundlesResponse +from .count_credit_bundles_response_params_status import CountCreditBundlesResponseParamsStatus +from .create_billing_credit_request_body_burn_strategy import CreateBillingCreditRequestBodyBurnStrategy +from .create_billing_credit_request_body_default_rollover_policy import ( + CreateBillingCreditRequestBodyDefaultRolloverPolicy, +) +from .create_billing_credit_response import CreateBillingCreditResponse +from .create_billing_plan_credit_grant_request_body_reset_cadence import ( + CreateBillingPlanCreditGrantRequestBodyResetCadence, +) +from .create_billing_plan_credit_grant_request_body_reset_start import CreateBillingPlanCreditGrantRequestBodyResetStart +from .create_billing_plan_credit_grant_response import CreateBillingPlanCreditGrantResponse +from .create_credit_bundle_request_body_expiry_type import CreateCreditBundleRequestBodyExpiryType +from .create_credit_bundle_request_body_status import CreateCreditBundleRequestBodyStatus +from .create_credit_bundle_response import CreateCreditBundleResponse +from .delete_billing_plan_credit_grant_response import DeleteBillingPlanCreditGrantResponse +from .delete_credit_bundle_response import DeleteCreditBundleResponse +from .get_credit_bundle_response import GetCreditBundleResponse +from .get_single_billing_credit_response import GetSingleBillingCreditResponse +from .grant_billing_credits_to_company_response import GrantBillingCreditsToCompanyResponse +from .list_billing_credits_params import ListBillingCreditsParams +from .list_billing_credits_response import ListBillingCreditsResponse +from .list_billing_plan_credit_grants_params import ListBillingPlanCreditGrantsParams +from .list_billing_plan_credit_grants_response import ListBillingPlanCreditGrantsResponse +from .list_company_grants_params import ListCompanyGrantsParams +from .list_company_grants_request_dir import ListCompanyGrantsRequestDir +from .list_company_grants_request_order import ListCompanyGrantsRequestOrder +from .list_company_grants_response import ListCompanyGrantsResponse +from .list_company_grants_response_params_dir import ListCompanyGrantsResponseParamsDir +from .list_company_grants_response_params_order import ListCompanyGrantsResponseParamsOrder +from .list_credit_bundles_params import ListCreditBundlesParams +from .list_credit_bundles_request_status import ListCreditBundlesRequestStatus +from .list_credit_bundles_response import ListCreditBundlesResponse +from .list_credit_bundles_response_params_status import ListCreditBundlesResponseParamsStatus +from .list_grants_for_credit_params import ListGrantsForCreditParams +from .list_grants_for_credit_response import ListGrantsForCreditResponse +from .soft_delete_billing_credit_response import SoftDeleteBillingCreditResponse +from .update_billing_credit_request_body_burn_strategy import UpdateBillingCreditRequestBodyBurnStrategy +from .update_billing_credit_request_body_default_rollover_policy import ( + UpdateBillingCreditRequestBodyDefaultRolloverPolicy, +) +from .update_billing_credit_response import UpdateBillingCreditResponse +from .update_credit_bundle_details_request_body_expiry_type import UpdateCreditBundleDetailsRequestBodyExpiryType +from .update_credit_bundle_details_request_body_status import UpdateCreditBundleDetailsRequestBodyStatus +from .update_credit_bundle_details_response import UpdateCreditBundleDetailsResponse +from .zero_out_grant_request_body_reason import ZeroOutGrantRequestBodyReason +from .zero_out_grant_response import ZeroOutGrantResponse + +__all__ = [ + "CountBillingCreditsGrantsParams", + "CountBillingCreditsGrantsResponse", + "CountBillingCreditsParams", + "CountBillingCreditsResponse", + "CountBillingPlanCreditGrantsParams", + "CountBillingPlanCreditGrantsResponse", + "CountCreditBundlesParams", + "CountCreditBundlesRequestStatus", + "CountCreditBundlesResponse", + "CountCreditBundlesResponseParamsStatus", + "CreateBillingCreditRequestBodyBurnStrategy", + "CreateBillingCreditRequestBodyDefaultRolloverPolicy", + "CreateBillingCreditResponse", + "CreateBillingPlanCreditGrantRequestBodyResetCadence", + "CreateBillingPlanCreditGrantRequestBodyResetStart", + "CreateBillingPlanCreditGrantResponse", + "CreateCreditBundleRequestBodyExpiryType", + "CreateCreditBundleRequestBodyStatus", + "CreateCreditBundleResponse", + "DeleteBillingPlanCreditGrantResponse", + "DeleteCreditBundleResponse", + "GetCreditBundleResponse", + "GetSingleBillingCreditResponse", + "GrantBillingCreditsToCompanyResponse", + "ListBillingCreditsParams", + "ListBillingCreditsResponse", + "ListBillingPlanCreditGrantsParams", + "ListBillingPlanCreditGrantsResponse", + "ListCompanyGrantsParams", + "ListCompanyGrantsRequestDir", + "ListCompanyGrantsRequestOrder", + "ListCompanyGrantsResponse", + "ListCompanyGrantsResponseParamsDir", + "ListCompanyGrantsResponseParamsOrder", + "ListCreditBundlesParams", + "ListCreditBundlesRequestStatus", + "ListCreditBundlesResponse", + "ListCreditBundlesResponseParamsStatus", + "ListGrantsForCreditParams", + "ListGrantsForCreditResponse", + "SoftDeleteBillingCreditResponse", + "UpdateBillingCreditRequestBodyBurnStrategy", + "UpdateBillingCreditRequestBodyDefaultRolloverPolicy", + "UpdateBillingCreditResponse", + "UpdateCreditBundleDetailsRequestBodyExpiryType", + "UpdateCreditBundleDetailsRequestBodyStatus", + "UpdateCreditBundleDetailsResponse", + "ZeroOutGrantRequestBodyReason", + "ZeroOutGrantResponse", +] diff --git a/src/schematic/credits/types/count_billing_credits_grants_params.py b/src/schematic/credits/types/count_billing_credits_grants_params.py new file mode 100644 index 0000000..3face0e --- /dev/null +++ b/src/schematic/credits/types/count_billing_credits_grants_params.py @@ -0,0 +1,33 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CountBillingCreditsGrantsParams(UniversalBaseModel): + """ + Input parameters + """ + + credit_id: typing.Optional[str] = None + ids: typing.Optional[typing.List[str]] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + 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/credits/types/count_billing_credits_grants_response.py b/src/schematic/credits/types/count_billing_credits_grants_response.py new file mode 100644 index 0000000..462ae79 --- /dev/null +++ b/src/schematic/credits/types/count_billing_credits_grants_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.count_response import CountResponse +from .count_billing_credits_grants_params import CountBillingCreditsGrantsParams + + +class CountBillingCreditsGrantsResponse(UniversalBaseModel): + data: CountResponse + params: CountBillingCreditsGrantsParams = 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/credits/types/count_billing_credits_params.py b/src/schematic/credits/types/count_billing_credits_params.py new file mode 100644 index 0000000..c6742ea --- /dev/null +++ b/src/schematic/credits/types/count_billing_credits_params.py @@ -0,0 +1,33 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CountBillingCreditsParams(UniversalBaseModel): + """ + Input parameters + """ + + ids: typing.Optional[typing.List[str]] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + name: typing.Optional[str] = None + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + 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/credits/types/count_billing_credits_response.py b/src/schematic/credits/types/count_billing_credits_response.py new file mode 100644 index 0000000..9b7b31c --- /dev/null +++ b/src/schematic/credits/types/count_billing_credits_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.count_response import CountResponse +from .count_billing_credits_params import CountBillingCreditsParams + + +class CountBillingCreditsResponse(UniversalBaseModel): + data: CountResponse + params: CountBillingCreditsParams = 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/credits/types/count_billing_plan_credit_grants_params.py b/src/schematic/credits/types/count_billing_plan_credit_grants_params.py new file mode 100644 index 0000000..00a4c58 --- /dev/null +++ b/src/schematic/credits/types/count_billing_plan_credit_grants_params.py @@ -0,0 +1,36 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CountBillingPlanCreditGrantsParams(UniversalBaseModel): + """ + Input parameters + """ + + credit_id: typing.Optional[str] = None + ids: typing.Optional[typing.List[str]] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + plan_id: typing.Optional[str] = None + plan_ids: typing.Optional[typing.List[str]] = 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/credits/types/count_billing_plan_credit_grants_response.py b/src/schematic/credits/types/count_billing_plan_credit_grants_response.py new file mode 100644 index 0000000..79ca22e --- /dev/null +++ b/src/schematic/credits/types/count_billing_plan_credit_grants_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.count_response import CountResponse +from .count_billing_plan_credit_grants_params import CountBillingPlanCreditGrantsParams + + +class CountBillingPlanCreditGrantsResponse(UniversalBaseModel): + data: CountResponse + params: CountBillingPlanCreditGrantsParams = 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/credits/types/count_credit_bundles_params.py b/src/schematic/credits/types/count_credit_bundles_params.py new file mode 100644 index 0000000..bc86976 --- /dev/null +++ b/src/schematic/credits/types/count_credit_bundles_params.py @@ -0,0 +1,37 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .count_credit_bundles_response_params_status import CountCreditBundlesResponseParamsStatus + + +class CountCreditBundlesParams(UniversalBaseModel): + """ + Input parameters + """ + + bundle_type: typing.Optional[typing.Literal["fixed"]] = None + credit_id: typing.Optional[str] = None + ids: typing.Optional[typing.List[str]] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + status: typing.Optional[CountCreditBundlesResponseParamsStatus] = 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/credits/types/count_credit_bundles_request_status.py b/src/schematic/credits/types/count_credit_bundles_request_status.py new file mode 100644 index 0000000..cb1f84e --- /dev/null +++ b/src/schematic/credits/types/count_credit_bundles_request_status.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CountCreditBundlesRequestStatus = typing.Union[typing.Literal["active", "inactive"], typing.Any] diff --git a/src/schematic/credits/types/count_credit_bundles_response.py b/src/schematic/credits/types/count_credit_bundles_response.py new file mode 100644 index 0000000..30e94cb --- /dev/null +++ b/src/schematic/credits/types/count_credit_bundles_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.count_response import CountResponse +from .count_credit_bundles_params import CountCreditBundlesParams + + +class CountCreditBundlesResponse(UniversalBaseModel): + data: CountResponse + params: CountCreditBundlesParams = 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/credits/types/count_credit_bundles_response_params_status.py b/src/schematic/credits/types/count_credit_bundles_response_params_status.py new file mode 100644 index 0000000..b9438a6 --- /dev/null +++ b/src/schematic/credits/types/count_credit_bundles_response_params_status.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CountCreditBundlesResponseParamsStatus = typing.Union[typing.Literal["active", "inactive"], typing.Any] diff --git a/src/schematic/credits/types/create_billing_credit_request_body_burn_strategy.py b/src/schematic/credits/types/create_billing_credit_request_body_burn_strategy.py new file mode 100644 index 0000000..3232491 --- /dev/null +++ b/src/schematic/credits/types/create_billing_credit_request_body_burn_strategy.py @@ -0,0 +1,13 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateBillingCreditRequestBodyBurnStrategy = typing.Union[ + typing.Literal[ + "plan_first_then_credit_bundles_first_in_first_out", + "first_in_first_out", + "last_in_first_out", + "expiration_priority", + ], + typing.Any, +] diff --git a/src/schematic/credits/types/create_billing_credit_request_body_default_rollover_policy.py b/src/schematic/credits/types/create_billing_credit_request_body_default_rollover_policy.py new file mode 100644 index 0000000..6f19394 --- /dev/null +++ b/src/schematic/credits/types/create_billing_credit_request_body_default_rollover_policy.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateBillingCreditRequestBodyDefaultRolloverPolicy = typing.Union[ + typing.Literal["none", "rollover", "expire"], typing.Any +] diff --git a/src/schematic/credits/types/create_billing_credit_response.py b/src/schematic/credits/types/create_billing_credit_response.py new file mode 100644 index 0000000..08086e1 --- /dev/null +++ b/src/schematic/credits/types/create_billing_credit_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_response_data import BillingCreditResponseData + + +class CreateBillingCreditResponse(UniversalBaseModel): + data: BillingCreditResponseData + 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/credits/types/create_billing_plan_credit_grant_request_body_reset_cadence.py b/src/schematic/credits/types/create_billing_plan_credit_grant_request_body_reset_cadence.py new file mode 100644 index 0000000..a3f8487 --- /dev/null +++ b/src/schematic/credits/types/create_billing_plan_credit_grant_request_body_reset_cadence.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateBillingPlanCreditGrantRequestBodyResetCadence = typing.Union[ + typing.Literal["monthly", "yearly", "daily", "weekly"], typing.Any +] diff --git a/src/schematic/credits/types/create_billing_plan_credit_grant_request_body_reset_start.py b/src/schematic/credits/types/create_billing_plan_credit_grant_request_body_reset_start.py new file mode 100644 index 0000000..23db8e6 --- /dev/null +++ b/src/schematic/credits/types/create_billing_plan_credit_grant_request_body_reset_start.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateBillingPlanCreditGrantRequestBodyResetStart = typing.Union[ + typing.Literal["billing_period", "first_of_month"], typing.Any +] diff --git a/src/schematic/credits/types/create_billing_plan_credit_grant_response.py b/src/schematic/credits/types/create_billing_plan_credit_grant_response.py new file mode 100644 index 0000000..4f81731 --- /dev/null +++ b/src/schematic/credits/types/create_billing_plan_credit_grant_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_plan_credit_grant_response_data import BillingPlanCreditGrantResponseData + + +class CreateBillingPlanCreditGrantResponse(UniversalBaseModel): + data: BillingPlanCreditGrantResponseData + 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/credits/types/create_credit_bundle_request_body_expiry_type.py b/src/schematic/credits/types/create_credit_bundle_request_body_expiry_type.py new file mode 100644 index 0000000..bb22025 --- /dev/null +++ b/src/schematic/credits/types/create_credit_bundle_request_body_expiry_type.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateCreditBundleRequestBodyExpiryType = typing.Union[typing.Literal["days_from_purchase", "no_expiry"], typing.Any] diff --git a/src/schematic/credits/types/create_credit_bundle_request_body_status.py b/src/schematic/credits/types/create_credit_bundle_request_body_status.py new file mode 100644 index 0000000..63a4c03 --- /dev/null +++ b/src/schematic/credits/types/create_credit_bundle_request_body_status.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreateCreditBundleRequestBodyStatus = typing.Union[typing.Literal["active", "inactive"], typing.Any] diff --git a/src/schematic/credits/types/create_credit_bundle_response.py b/src/schematic/credits/types/create_credit_bundle_response.py new file mode 100644 index 0000000..b86f9f7 --- /dev/null +++ b/src/schematic/credits/types/create_credit_bundle_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_bundle_response_data import BillingCreditBundleResponseData + + +class CreateCreditBundleResponse(UniversalBaseModel): + data: BillingCreditBundleResponseData + 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/credits/types/delete_billing_plan_credit_grant_response.py b/src/schematic/credits/types/delete_billing_plan_credit_grant_response.py new file mode 100644 index 0000000..e7a987c --- /dev/null +++ b/src/schematic/credits/types/delete_billing_plan_credit_grant_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.delete_response import DeleteResponse + + +class DeleteBillingPlanCreditGrantResponse(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/credits/types/delete_credit_bundle_response.py b/src/schematic/credits/types/delete_credit_bundle_response.py new file mode 100644 index 0000000..cc1ad0c --- /dev/null +++ b/src/schematic/credits/types/delete_credit_bundle_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.delete_response import DeleteResponse + + +class DeleteCreditBundleResponse(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/credits/types/get_credit_bundle_response.py b/src/schematic/credits/types/get_credit_bundle_response.py new file mode 100644 index 0000000..1ae3cfe --- /dev/null +++ b/src/schematic/credits/types/get_credit_bundle_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_bundle_response_data import BillingCreditBundleResponseData + + +class GetCreditBundleResponse(UniversalBaseModel): + data: BillingCreditBundleResponseData + 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/credits/types/get_single_billing_credit_response.py b/src/schematic/credits/types/get_single_billing_credit_response.py new file mode 100644 index 0000000..3223738 --- /dev/null +++ b/src/schematic/credits/types/get_single_billing_credit_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_response_data import BillingCreditResponseData + + +class GetSingleBillingCreditResponse(UniversalBaseModel): + data: BillingCreditResponseData + 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/credits/types/grant_billing_credits_to_company_response.py b/src/schematic/credits/types/grant_billing_credits_to_company_response.py new file mode 100644 index 0000000..decaf23 --- /dev/null +++ b/src/schematic/credits/types/grant_billing_credits_to_company_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_grant_response_data import BillingCreditGrantResponseData + + +class GrantBillingCreditsToCompanyResponse(UniversalBaseModel): + data: BillingCreditGrantResponseData + 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/credits/types/list_billing_credits_params.py b/src/schematic/credits/types/list_billing_credits_params.py new file mode 100644 index 0000000..8bd4350 --- /dev/null +++ b/src/schematic/credits/types/list_billing_credits_params.py @@ -0,0 +1,33 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ListBillingCreditsParams(UniversalBaseModel): + """ + Input parameters + """ + + ids: typing.Optional[typing.List[str]] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + name: typing.Optional[str] = None + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + 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/credits/types/list_billing_credits_response.py b/src/schematic/credits/types/list_billing_credits_response.py new file mode 100644 index 0000000..c87461d --- /dev/null +++ b/src/schematic/credits/types/list_billing_credits_response.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_response_data import BillingCreditResponseData +from .list_billing_credits_params import ListBillingCreditsParams + + +class ListBillingCreditsResponse(UniversalBaseModel): + data: typing.List[BillingCreditResponseData] = pydantic.Field() + """ + The returned resources + """ + + params: ListBillingCreditsParams = 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/credits/types/list_billing_plan_credit_grants_params.py b/src/schematic/credits/types/list_billing_plan_credit_grants_params.py new file mode 100644 index 0000000..1a23728 --- /dev/null +++ b/src/schematic/credits/types/list_billing_plan_credit_grants_params.py @@ -0,0 +1,36 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ListBillingPlanCreditGrantsParams(UniversalBaseModel): + """ + Input parameters + """ + + credit_id: typing.Optional[str] = None + ids: typing.Optional[typing.List[str]] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + plan_id: typing.Optional[str] = None + plan_ids: typing.Optional[typing.List[str]] = 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/credits/types/list_billing_plan_credit_grants_response.py b/src/schematic/credits/types/list_billing_plan_credit_grants_response.py new file mode 100644 index 0000000..a81b761 --- /dev/null +++ b/src/schematic/credits/types/list_billing_plan_credit_grants_response.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_plan_credit_grant_response_data import BillingPlanCreditGrantResponseData +from .list_billing_plan_credit_grants_params import ListBillingPlanCreditGrantsParams + + +class ListBillingPlanCreditGrantsResponse(UniversalBaseModel): + data: typing.List[BillingPlanCreditGrantResponseData] = pydantic.Field() + """ + The returned resources + """ + + params: ListBillingPlanCreditGrantsParams = 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/credits/types/list_company_grants_params.py b/src/schematic/credits/types/list_company_grants_params.py new file mode 100644 index 0000000..073ee64 --- /dev/null +++ b/src/schematic/credits/types/list_company_grants_params.py @@ -0,0 +1,37 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .list_company_grants_response_params_dir import ListCompanyGrantsResponseParamsDir +from .list_company_grants_response_params_order import ListCompanyGrantsResponseParamsOrder + + +class ListCompanyGrantsParams(UniversalBaseModel): + """ + Input parameters + """ + + company_id: typing.Optional[str] = None + dir: typing.Optional[ListCompanyGrantsResponseParamsDir] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + order: typing.Optional[ListCompanyGrantsResponseParamsOrder] = 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/credits/types/list_company_grants_request_dir.py b/src/schematic/credits/types/list_company_grants_request_dir.py new file mode 100644 index 0000000..d0fe38a --- /dev/null +++ b/src/schematic/credits/types/list_company_grants_request_dir.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ListCompanyGrantsRequestDir = typing.Union[typing.Literal["asc", "desc"], typing.Any] diff --git a/src/schematic/credits/types/list_company_grants_request_order.py b/src/schematic/credits/types/list_company_grants_request_order.py new file mode 100644 index 0000000..aea9313 --- /dev/null +++ b/src/schematic/credits/types/list_company_grants_request_order.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ListCompanyGrantsRequestOrder = typing.Union[ + typing.Literal["created_at", "expires_at", "quantity", "quantity_remaining"], typing.Any +] diff --git a/src/schematic/credits/types/list_company_grants_response.py b/src/schematic/credits/types/list_company_grants_response.py new file mode 100644 index 0000000..eeabb2c --- /dev/null +++ b/src/schematic/credits/types/list_company_grants_response.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_grant_response_data import BillingCreditGrantResponseData +from .list_company_grants_params import ListCompanyGrantsParams + + +class ListCompanyGrantsResponse(UniversalBaseModel): + data: typing.List[BillingCreditGrantResponseData] = pydantic.Field() + """ + The returned resources + """ + + params: ListCompanyGrantsParams = 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/credits/types/list_company_grants_response_params_dir.py b/src/schematic/credits/types/list_company_grants_response_params_dir.py new file mode 100644 index 0000000..83096f5 --- /dev/null +++ b/src/schematic/credits/types/list_company_grants_response_params_dir.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ListCompanyGrantsResponseParamsDir = typing.Union[typing.Literal["asc", "desc"], typing.Any] diff --git a/src/schematic/credits/types/list_company_grants_response_params_order.py b/src/schematic/credits/types/list_company_grants_response_params_order.py new file mode 100644 index 0000000..6742d6b --- /dev/null +++ b/src/schematic/credits/types/list_company_grants_response_params_order.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ListCompanyGrantsResponseParamsOrder = typing.Union[ + typing.Literal["created_at", "expires_at", "quantity", "quantity_remaining"], typing.Any +] diff --git a/src/schematic/credits/types/list_credit_bundles_params.py b/src/schematic/credits/types/list_credit_bundles_params.py new file mode 100644 index 0000000..e9b4216 --- /dev/null +++ b/src/schematic/credits/types/list_credit_bundles_params.py @@ -0,0 +1,37 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .list_credit_bundles_response_params_status import ListCreditBundlesResponseParamsStatus + + +class ListCreditBundlesParams(UniversalBaseModel): + """ + Input parameters + """ + + bundle_type: typing.Optional[typing.Literal["fixed"]] = None + credit_id: typing.Optional[str] = None + ids: typing.Optional[typing.List[str]] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + status: typing.Optional[ListCreditBundlesResponseParamsStatus] = 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/credits/types/list_credit_bundles_request_status.py b/src/schematic/credits/types/list_credit_bundles_request_status.py new file mode 100644 index 0000000..3a354f2 --- /dev/null +++ b/src/schematic/credits/types/list_credit_bundles_request_status.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ListCreditBundlesRequestStatus = typing.Union[typing.Literal["active", "inactive"], typing.Any] diff --git a/src/schematic/credits/types/list_credit_bundles_response.py b/src/schematic/credits/types/list_credit_bundles_response.py new file mode 100644 index 0000000..cfd4f37 --- /dev/null +++ b/src/schematic/credits/types/list_credit_bundles_response.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_bundle_response_data import BillingCreditBundleResponseData +from .list_credit_bundles_params import ListCreditBundlesParams + + +class ListCreditBundlesResponse(UniversalBaseModel): + data: typing.List[BillingCreditBundleResponseData] = pydantic.Field() + """ + The returned resources + """ + + params: ListCreditBundlesParams = 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/credits/types/list_credit_bundles_response_params_status.py b/src/schematic/credits/types/list_credit_bundles_response_params_status.py new file mode 100644 index 0000000..623c9c0 --- /dev/null +++ b/src/schematic/credits/types/list_credit_bundles_response_params_status.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ListCreditBundlesResponseParamsStatus = typing.Union[typing.Literal["active", "inactive"], typing.Any] diff --git a/src/schematic/credits/types/list_grants_for_credit_params.py b/src/schematic/credits/types/list_grants_for_credit_params.py new file mode 100644 index 0000000..1a3477b --- /dev/null +++ b/src/schematic/credits/types/list_grants_for_credit_params.py @@ -0,0 +1,33 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ListGrantsForCreditParams(UniversalBaseModel): + """ + Input parameters + """ + + credit_id: typing.Optional[str] = None + ids: typing.Optional[typing.List[str]] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + 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/credits/types/list_grants_for_credit_response.py b/src/schematic/credits/types/list_grants_for_credit_response.py new file mode 100644 index 0000000..6818634 --- /dev/null +++ b/src/schematic/credits/types/list_grants_for_credit_response.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_grant_response_data import BillingCreditGrantResponseData +from .list_grants_for_credit_params import ListGrantsForCreditParams + + +class ListGrantsForCreditResponse(UniversalBaseModel): + data: typing.List[BillingCreditGrantResponseData] = pydantic.Field() + """ + The returned resources + """ + + params: ListGrantsForCreditParams = 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/credits/types/soft_delete_billing_credit_response.py b/src/schematic/credits/types/soft_delete_billing_credit_response.py new file mode 100644 index 0000000..4b910b7 --- /dev/null +++ b/src/schematic/credits/types/soft_delete_billing_credit_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.delete_response import DeleteResponse + + +class SoftDeleteBillingCreditResponse(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/credits/types/update_billing_credit_request_body_burn_strategy.py b/src/schematic/credits/types/update_billing_credit_request_body_burn_strategy.py new file mode 100644 index 0000000..cb8eb22 --- /dev/null +++ b/src/schematic/credits/types/update_billing_credit_request_body_burn_strategy.py @@ -0,0 +1,13 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +UpdateBillingCreditRequestBodyBurnStrategy = typing.Union[ + typing.Literal[ + "plan_first_then_credit_bundles_first_in_first_out", + "first_in_first_out", + "last_in_first_out", + "expiration_priority", + ], + typing.Any, +] diff --git a/src/schematic/credits/types/update_billing_credit_request_body_default_rollover_policy.py b/src/schematic/credits/types/update_billing_credit_request_body_default_rollover_policy.py new file mode 100644 index 0000000..630fd28 --- /dev/null +++ b/src/schematic/credits/types/update_billing_credit_request_body_default_rollover_policy.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +UpdateBillingCreditRequestBodyDefaultRolloverPolicy = typing.Union[ + typing.Literal["none", "rollover", "expire"], typing.Any +] diff --git a/src/schematic/credits/types/update_billing_credit_response.py b/src/schematic/credits/types/update_billing_credit_response.py new file mode 100644 index 0000000..52bed43 --- /dev/null +++ b/src/schematic/credits/types/update_billing_credit_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_response_data import BillingCreditResponseData + + +class UpdateBillingCreditResponse(UniversalBaseModel): + data: BillingCreditResponseData + 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/credits/types/update_credit_bundle_details_request_body_expiry_type.py b/src/schematic/credits/types/update_credit_bundle_details_request_body_expiry_type.py new file mode 100644 index 0000000..0b71ef1 --- /dev/null +++ b/src/schematic/credits/types/update_credit_bundle_details_request_body_expiry_type.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +UpdateCreditBundleDetailsRequestBodyExpiryType = typing.Union[ + typing.Literal["days_from_purchase", "no_expiry"], typing.Any +] diff --git a/src/schematic/credits/types/update_credit_bundle_details_request_body_status.py b/src/schematic/credits/types/update_credit_bundle_details_request_body_status.py new file mode 100644 index 0000000..30b5180 --- /dev/null +++ b/src/schematic/credits/types/update_credit_bundle_details_request_body_status.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +UpdateCreditBundleDetailsRequestBodyStatus = typing.Union[typing.Literal["active", "inactive"], typing.Any] diff --git a/src/schematic/credits/types/update_credit_bundle_details_response.py b/src/schematic/credits/types/update_credit_bundle_details_response.py new file mode 100644 index 0000000..a88f62d --- /dev/null +++ b/src/schematic/credits/types/update_credit_bundle_details_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_bundle_response_data import BillingCreditBundleResponseData + + +class UpdateCreditBundleDetailsResponse(UniversalBaseModel): + data: BillingCreditBundleResponseData + 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/credits/types/zero_out_grant_request_body_reason.py b/src/schematic/credits/types/zero_out_grant_request_body_reason.py new file mode 100644 index 0000000..2f8b489 --- /dev/null +++ b/src/schematic/credits/types/zero_out_grant_request_body_reason.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ZeroOutGrantRequestBodyReason = typing.Union[typing.Literal["plan_change", "manual", "plan_period_reset"], typing.Any] diff --git a/src/schematic/credits/types/zero_out_grant_response.py b/src/schematic/credits/types/zero_out_grant_response.py new file mode 100644 index 0000000..33a3018 --- /dev/null +++ b/src/schematic/credits/types/zero_out_grant_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_credit_grant_response_data import BillingCreditGrantResponseData + + +class ZeroOutGrantResponse(UniversalBaseModel): + data: BillingCreditGrantResponseData + 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/entitlements/__init__.py b/src/schematic/entitlements/__init__.py index 2d559f6..7a013ef 100644 --- a/src/schematic/entitlements/__init__.py +++ b/src/schematic/entitlements/__init__.py @@ -19,6 +19,7 @@ CreateCompanyOverrideResponse, CreatePlanEntitlementRequestBodyMetricPeriod, CreatePlanEntitlementRequestBodyMetricPeriodMonthReset, + CreatePlanEntitlementRequestBodyPriceBehavior, CreatePlanEntitlementRequestBodyValueType, CreatePlanEntitlementResponse, DeleteCompanyOverrideResponse, @@ -43,6 +44,7 @@ UpdateCompanyOverrideResponse, UpdatePlanEntitlementRequestBodyMetricPeriod, UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset, + UpdatePlanEntitlementRequestBodyPriceBehavior, UpdatePlanEntitlementRequestBodyValueType, UpdatePlanEntitlementResponse, ) @@ -64,6 +66,7 @@ "CreateCompanyOverrideResponse", "CreatePlanEntitlementRequestBodyMetricPeriod", "CreatePlanEntitlementRequestBodyMetricPeriodMonthReset", + "CreatePlanEntitlementRequestBodyPriceBehavior", "CreatePlanEntitlementRequestBodyValueType", "CreatePlanEntitlementResponse", "DeleteCompanyOverrideResponse", @@ -88,6 +91,7 @@ "UpdateCompanyOverrideResponse", "UpdatePlanEntitlementRequestBodyMetricPeriod", "UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset", + "UpdatePlanEntitlementRequestBodyPriceBehavior", "UpdatePlanEntitlementRequestBodyValueType", "UpdatePlanEntitlementResponse", ] diff --git a/src/schematic/entitlements/client.py b/src/schematic/entitlements/client.py index 93fddcc..d083f05 100644 --- a/src/schematic/entitlements/client.py +++ b/src/schematic/entitlements/client.py @@ -5,6 +5,7 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions +from ..types.create_price_tier_request_body import CreatePriceTierRequestBody from .raw_client import AsyncRawEntitlementsClient, RawEntitlementsClient from .types.count_company_overrides_response import CountCompanyOverridesResponse from .types.count_feature_companies_response import CountFeatureCompaniesResponse @@ -21,6 +22,7 @@ from .types.create_plan_entitlement_request_body_metric_period_month_reset import ( CreatePlanEntitlementRequestBodyMetricPeriodMonthReset, ) +from .types.create_plan_entitlement_request_body_price_behavior import CreatePlanEntitlementRequestBodyPriceBehavior from .types.create_plan_entitlement_request_body_value_type import CreatePlanEntitlementRequestBodyValueType from .types.create_plan_entitlement_response import CreatePlanEntitlementResponse from .types.delete_company_override_response import DeleteCompanyOverrideResponse @@ -43,6 +45,7 @@ from .types.update_plan_entitlement_request_body_metric_period_month_reset import ( UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset, ) +from .types.update_plan_entitlement_request_body_price_behavior import UpdatePlanEntitlementRequestBodyPriceBehavior from .types.update_plan_entitlement_request_body_value_type import UpdatePlanEntitlementRequestBodyValueType from .types.update_plan_entitlement_response import UpdatePlanEntitlementResponse @@ -146,10 +149,12 @@ def create_company_override( company_id: str, feature_id: str, value_type: CreateCompanyOverrideRequestBodyValueType, + credit_consumption_rate: typing.Optional[float] = OMIT, expiration_date: typing.Optional[dt.datetime] = OMIT, metric_period: typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriodMonthReset] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -163,6 +168,8 @@ def create_company_override( value_type : CreateCompanyOverrideRequestBodyValueType + credit_consumption_rate : typing.Optional[float] + expiration_date : typing.Optional[dt.datetime] metric_period : typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriod] @@ -171,6 +178,8 @@ def create_company_override( value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] @@ -200,10 +209,12 @@ def create_company_override( company_id=company_id, feature_id=feature_id, value_type=value_type, + credit_consumption_rate=credit_consumption_rate, expiration_date=expiration_date, metric_period=metric_period, metric_period_month_reset=metric_period_month_reset, value_bool=value_bool, + value_credit_id=value_credit_id, value_numeric=value_numeric, value_trait_id=value_trait_id, request_options=request_options, @@ -246,10 +257,12 @@ def update_company_override( company_override_id: str, *, value_type: UpdateCompanyOverrideRequestBodyValueType, + credit_consumption_rate: typing.Optional[float] = OMIT, expiration_date: typing.Optional[dt.datetime] = OMIT, metric_period: typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriodMonthReset] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -262,6 +275,8 @@ def update_company_override( value_type : UpdateCompanyOverrideRequestBodyValueType + credit_consumption_rate : typing.Optional[float] + expiration_date : typing.Optional[dt.datetime] metric_period : typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriod] @@ -270,6 +285,8 @@ def update_company_override( value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] @@ -297,10 +314,12 @@ def update_company_override( _response = self._raw_client.update_company_override( company_override_id, value_type=value_type, + credit_consumption_rate=credit_consumption_rate, expiration_date=expiration_date, metric_period=metric_period, metric_period_month_reset=metric_period_month_reset, value_bool=value_bool, + value_credit_id=value_credit_id, value_numeric=value_numeric, value_trait_id=value_trait_id, request_options=request_options, @@ -798,19 +817,26 @@ def create_plan_entitlement( feature_id: str, plan_id: str, value_type: CreatePlanEntitlementRequestBodyValueType, + billing_product_id: typing.Optional[str] = OMIT, + credit_consumption_rate: typing.Optional[float] = OMIT, currency: typing.Optional[str] = OMIT, metric_period: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, + monthly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, monthly_unit_price: typing.Optional[int] = OMIT, monthly_unit_price_decimal: typing.Optional[str] = OMIT, overage_billing_product_id: typing.Optional[str] = OMIT, - price_behavior: typing.Optional[str] = OMIT, + price_behavior: typing.Optional[CreatePlanEntitlementRequestBodyPriceBehavior] = OMIT, + price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, soft_limit: typing.Optional[int] = OMIT, + tier_mode: typing.Optional[str] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, yearly_metered_price_id: typing.Optional[str] = OMIT, + yearly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, yearly_unit_price: typing.Optional[int] = OMIT, yearly_unit_price_decimal: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -824,6 +850,10 @@ def create_plan_entitlement( value_type : CreatePlanEntitlementRequestBodyValueType + billing_product_id : typing.Optional[str] + + credit_consumption_rate : typing.Optional[float] + currency : typing.Optional[str] metric_period : typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriod] @@ -832,24 +862,35 @@ def create_plan_entitlement( monthly_metered_price_id : typing.Optional[str] + monthly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + monthly_unit_price : typing.Optional[int] monthly_unit_price_decimal : typing.Optional[str] overage_billing_product_id : typing.Optional[str] - price_behavior : typing.Optional[str] + price_behavior : typing.Optional[CreatePlanEntitlementRequestBodyPriceBehavior] + + price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + Use MonthlyPriceTiers or YearlyPriceTiers instead soft_limit : typing.Optional[int] + tier_mode : typing.Optional[str] + value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] yearly_metered_price_id : typing.Optional[str] + yearly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + yearly_unit_price : typing.Optional[int] yearly_unit_price_decimal : typing.Optional[str] @@ -879,19 +920,26 @@ def create_plan_entitlement( feature_id=feature_id, plan_id=plan_id, value_type=value_type, + billing_product_id=billing_product_id, + credit_consumption_rate=credit_consumption_rate, currency=currency, metric_period=metric_period, metric_period_month_reset=metric_period_month_reset, monthly_metered_price_id=monthly_metered_price_id, + monthly_price_tiers=monthly_price_tiers, monthly_unit_price=monthly_unit_price, monthly_unit_price_decimal=monthly_unit_price_decimal, overage_billing_product_id=overage_billing_product_id, price_behavior=price_behavior, + price_tiers=price_tiers, soft_limit=soft_limit, + tier_mode=tier_mode, value_bool=value_bool, + value_credit_id=value_credit_id, value_numeric=value_numeric, value_trait_id=value_trait_id, yearly_metered_price_id=yearly_metered_price_id, + yearly_price_tiers=yearly_price_tiers, yearly_unit_price=yearly_unit_price, yearly_unit_price_decimal=yearly_unit_price_decimal, request_options=request_options, @@ -934,19 +982,26 @@ def update_plan_entitlement( plan_entitlement_id: str, *, value_type: UpdatePlanEntitlementRequestBodyValueType, + billing_product_id: typing.Optional[str] = OMIT, + credit_consumption_rate: typing.Optional[float] = OMIT, currency: typing.Optional[str] = OMIT, metric_period: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, + monthly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, monthly_unit_price: typing.Optional[int] = OMIT, monthly_unit_price_decimal: typing.Optional[str] = OMIT, overage_billing_product_id: typing.Optional[str] = OMIT, - price_behavior: typing.Optional[str] = OMIT, + price_behavior: typing.Optional[UpdatePlanEntitlementRequestBodyPriceBehavior] = OMIT, + price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, soft_limit: typing.Optional[int] = OMIT, + tier_mode: typing.Optional[str] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, yearly_metered_price_id: typing.Optional[str] = OMIT, + yearly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, yearly_unit_price: typing.Optional[int] = OMIT, yearly_unit_price_decimal: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -959,6 +1014,10 @@ def update_plan_entitlement( value_type : UpdatePlanEntitlementRequestBodyValueType + billing_product_id : typing.Optional[str] + + credit_consumption_rate : typing.Optional[float] + currency : typing.Optional[str] metric_period : typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriod] @@ -967,24 +1026,35 @@ def update_plan_entitlement( monthly_metered_price_id : typing.Optional[str] + monthly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + monthly_unit_price : typing.Optional[int] monthly_unit_price_decimal : typing.Optional[str] overage_billing_product_id : typing.Optional[str] - price_behavior : typing.Optional[str] + price_behavior : typing.Optional[UpdatePlanEntitlementRequestBodyPriceBehavior] + + price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + Use MonthlyPriceTiers or YearlyPriceTiers instead soft_limit : typing.Optional[int] + tier_mode : typing.Optional[str] + value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] yearly_metered_price_id : typing.Optional[str] + yearly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + yearly_unit_price : typing.Optional[int] yearly_unit_price_decimal : typing.Optional[str] @@ -1012,19 +1082,26 @@ def update_plan_entitlement( _response = self._raw_client.update_plan_entitlement( plan_entitlement_id, value_type=value_type, + billing_product_id=billing_product_id, + credit_consumption_rate=credit_consumption_rate, currency=currency, metric_period=metric_period, metric_period_month_reset=metric_period_month_reset, monthly_metered_price_id=monthly_metered_price_id, + monthly_price_tiers=monthly_price_tiers, monthly_unit_price=monthly_unit_price, monthly_unit_price_decimal=monthly_unit_price_decimal, overage_billing_product_id=overage_billing_product_id, price_behavior=price_behavior, + price_tiers=price_tiers, soft_limit=soft_limit, + tier_mode=tier_mode, value_bool=value_bool, + value_credit_id=value_credit_id, value_numeric=value_numeric, value_trait_id=value_trait_id, yearly_metered_price_id=yearly_metered_price_id, + yearly_price_tiers=yearly_price_tiers, yearly_unit_price=yearly_unit_price, yearly_unit_price_decimal=yearly_unit_price_decimal, request_options=request_options, @@ -1273,10 +1350,12 @@ async def create_company_override( company_id: str, feature_id: str, value_type: CreateCompanyOverrideRequestBodyValueType, + credit_consumption_rate: typing.Optional[float] = OMIT, expiration_date: typing.Optional[dt.datetime] = OMIT, metric_period: typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriodMonthReset] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -1290,6 +1369,8 @@ async def create_company_override( value_type : CreateCompanyOverrideRequestBodyValueType + credit_consumption_rate : typing.Optional[float] + expiration_date : typing.Optional[dt.datetime] metric_period : typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriod] @@ -1298,6 +1379,8 @@ async def create_company_override( value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] @@ -1335,10 +1418,12 @@ async def main() -> None: company_id=company_id, feature_id=feature_id, value_type=value_type, + credit_consumption_rate=credit_consumption_rate, expiration_date=expiration_date, metric_period=metric_period, metric_period_month_reset=metric_period_month_reset, value_bool=value_bool, + value_credit_id=value_credit_id, value_numeric=value_numeric, value_trait_id=value_trait_id, request_options=request_options, @@ -1389,10 +1474,12 @@ async def update_company_override( company_override_id: str, *, value_type: UpdateCompanyOverrideRequestBodyValueType, + credit_consumption_rate: typing.Optional[float] = OMIT, expiration_date: typing.Optional[dt.datetime] = OMIT, metric_period: typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriodMonthReset] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -1405,6 +1492,8 @@ async def update_company_override( value_type : UpdateCompanyOverrideRequestBodyValueType + credit_consumption_rate : typing.Optional[float] + expiration_date : typing.Optional[dt.datetime] metric_period : typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriod] @@ -1413,6 +1502,8 @@ async def update_company_override( value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] @@ -1448,10 +1539,12 @@ async def main() -> None: _response = await self._raw_client.update_company_override( company_override_id, value_type=value_type, + credit_consumption_rate=credit_consumption_rate, expiration_date=expiration_date, metric_period=metric_period, metric_period_month_reset=metric_period_month_reset, value_bool=value_bool, + value_credit_id=value_credit_id, value_numeric=value_numeric, value_trait_id=value_trait_id, request_options=request_options, @@ -2021,19 +2114,26 @@ async def create_plan_entitlement( feature_id: str, plan_id: str, value_type: CreatePlanEntitlementRequestBodyValueType, + billing_product_id: typing.Optional[str] = OMIT, + credit_consumption_rate: typing.Optional[float] = OMIT, currency: typing.Optional[str] = OMIT, metric_period: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, + monthly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, monthly_unit_price: typing.Optional[int] = OMIT, monthly_unit_price_decimal: typing.Optional[str] = OMIT, overage_billing_product_id: typing.Optional[str] = OMIT, - price_behavior: typing.Optional[str] = OMIT, + price_behavior: typing.Optional[CreatePlanEntitlementRequestBodyPriceBehavior] = OMIT, + price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, soft_limit: typing.Optional[int] = OMIT, + tier_mode: typing.Optional[str] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, yearly_metered_price_id: typing.Optional[str] = OMIT, + yearly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, yearly_unit_price: typing.Optional[int] = OMIT, yearly_unit_price_decimal: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -2047,6 +2147,10 @@ async def create_plan_entitlement( value_type : CreatePlanEntitlementRequestBodyValueType + billing_product_id : typing.Optional[str] + + credit_consumption_rate : typing.Optional[float] + currency : typing.Optional[str] metric_period : typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriod] @@ -2055,24 +2159,35 @@ async def create_plan_entitlement( monthly_metered_price_id : typing.Optional[str] + monthly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + monthly_unit_price : typing.Optional[int] monthly_unit_price_decimal : typing.Optional[str] overage_billing_product_id : typing.Optional[str] - price_behavior : typing.Optional[str] + price_behavior : typing.Optional[CreatePlanEntitlementRequestBodyPriceBehavior] + + price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + Use MonthlyPriceTiers or YearlyPriceTiers instead soft_limit : typing.Optional[int] + tier_mode : typing.Optional[str] + value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] yearly_metered_price_id : typing.Optional[str] + yearly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + yearly_unit_price : typing.Optional[int] yearly_unit_price_decimal : typing.Optional[str] @@ -2110,19 +2225,26 @@ async def main() -> None: feature_id=feature_id, plan_id=plan_id, value_type=value_type, + billing_product_id=billing_product_id, + credit_consumption_rate=credit_consumption_rate, currency=currency, metric_period=metric_period, metric_period_month_reset=metric_period_month_reset, monthly_metered_price_id=monthly_metered_price_id, + monthly_price_tiers=monthly_price_tiers, monthly_unit_price=monthly_unit_price, monthly_unit_price_decimal=monthly_unit_price_decimal, overage_billing_product_id=overage_billing_product_id, price_behavior=price_behavior, + price_tiers=price_tiers, soft_limit=soft_limit, + tier_mode=tier_mode, value_bool=value_bool, + value_credit_id=value_credit_id, value_numeric=value_numeric, value_trait_id=value_trait_id, yearly_metered_price_id=yearly_metered_price_id, + yearly_price_tiers=yearly_price_tiers, yearly_unit_price=yearly_unit_price, yearly_unit_price_decimal=yearly_unit_price_decimal, request_options=request_options, @@ -2173,19 +2295,26 @@ async def update_plan_entitlement( plan_entitlement_id: str, *, value_type: UpdatePlanEntitlementRequestBodyValueType, + billing_product_id: typing.Optional[str] = OMIT, + credit_consumption_rate: typing.Optional[float] = OMIT, currency: typing.Optional[str] = OMIT, metric_period: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, + monthly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, monthly_unit_price: typing.Optional[int] = OMIT, monthly_unit_price_decimal: typing.Optional[str] = OMIT, overage_billing_product_id: typing.Optional[str] = OMIT, - price_behavior: typing.Optional[str] = OMIT, + price_behavior: typing.Optional[UpdatePlanEntitlementRequestBodyPriceBehavior] = OMIT, + price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, soft_limit: typing.Optional[int] = OMIT, + tier_mode: typing.Optional[str] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, yearly_metered_price_id: typing.Optional[str] = OMIT, + yearly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, yearly_unit_price: typing.Optional[int] = OMIT, yearly_unit_price_decimal: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -2198,6 +2327,10 @@ async def update_plan_entitlement( value_type : UpdatePlanEntitlementRequestBodyValueType + billing_product_id : typing.Optional[str] + + credit_consumption_rate : typing.Optional[float] + currency : typing.Optional[str] metric_period : typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriod] @@ -2206,24 +2339,35 @@ async def update_plan_entitlement( monthly_metered_price_id : typing.Optional[str] + monthly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + monthly_unit_price : typing.Optional[int] monthly_unit_price_decimal : typing.Optional[str] overage_billing_product_id : typing.Optional[str] - price_behavior : typing.Optional[str] + price_behavior : typing.Optional[UpdatePlanEntitlementRequestBodyPriceBehavior] + + price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + Use MonthlyPriceTiers or YearlyPriceTiers instead soft_limit : typing.Optional[int] + tier_mode : typing.Optional[str] + value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] yearly_metered_price_id : typing.Optional[str] + yearly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + yearly_unit_price : typing.Optional[int] yearly_unit_price_decimal : typing.Optional[str] @@ -2259,19 +2403,26 @@ async def main() -> None: _response = await self._raw_client.update_plan_entitlement( plan_entitlement_id, value_type=value_type, + billing_product_id=billing_product_id, + credit_consumption_rate=credit_consumption_rate, currency=currency, metric_period=metric_period, metric_period_month_reset=metric_period_month_reset, monthly_metered_price_id=monthly_metered_price_id, + monthly_price_tiers=monthly_price_tiers, monthly_unit_price=monthly_unit_price, monthly_unit_price_decimal=monthly_unit_price_decimal, overage_billing_product_id=overage_billing_product_id, price_behavior=price_behavior, + price_tiers=price_tiers, soft_limit=soft_limit, + tier_mode=tier_mode, value_bool=value_bool, + value_credit_id=value_credit_id, value_numeric=value_numeric, value_trait_id=value_trait_id, yearly_metered_price_id=yearly_metered_price_id, + yearly_price_tiers=yearly_price_tiers, yearly_unit_price=yearly_unit_price, yearly_unit_price_decimal=yearly_unit_price_decimal, request_options=request_options, diff --git a/src/schematic/entitlements/raw_client.py b/src/schematic/entitlements/raw_client.py index d27441d..69899f6 100644 --- a/src/schematic/entitlements/raw_client.py +++ b/src/schematic/entitlements/raw_client.py @@ -10,12 +10,14 @@ from ..core.jsonable_encoder import jsonable_encoder from ..core.pydantic_utilities import parse_obj_as from ..core.request_options import RequestOptions +from ..core.serialization import convert_and_respect_annotation_metadata from ..errors.bad_request_error import BadRequestError from ..errors.forbidden_error import ForbiddenError from ..errors.internal_server_error import InternalServerError from ..errors.not_found_error import NotFoundError from ..errors.unauthorized_error import UnauthorizedError from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.create_price_tier_request_body import CreatePriceTierRequestBody from .types.count_company_overrides_response import CountCompanyOverridesResponse from .types.count_feature_companies_response import CountFeatureCompaniesResponse from .types.count_feature_usage_response import CountFeatureUsageResponse @@ -31,6 +33,7 @@ from .types.create_plan_entitlement_request_body_metric_period_month_reset import ( CreatePlanEntitlementRequestBodyMetricPeriodMonthReset, ) +from .types.create_plan_entitlement_request_body_price_behavior import CreatePlanEntitlementRequestBodyPriceBehavior from .types.create_plan_entitlement_request_body_value_type import CreatePlanEntitlementRequestBodyValueType from .types.create_plan_entitlement_response import CreatePlanEntitlementResponse from .types.delete_company_override_response import DeleteCompanyOverrideResponse @@ -53,6 +56,7 @@ from .types.update_plan_entitlement_request_body_metric_period_month_reset import ( UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset, ) +from .types.update_plan_entitlement_request_body_price_behavior import UpdatePlanEntitlementRequestBodyPriceBehavior from .types.update_plan_entitlement_request_body_value_type import UpdatePlanEntitlementRequestBodyValueType from .types.update_plan_entitlement_response import UpdatePlanEntitlementResponse @@ -212,10 +216,12 @@ def create_company_override( company_id: str, feature_id: str, value_type: CreateCompanyOverrideRequestBodyValueType, + credit_consumption_rate: typing.Optional[float] = OMIT, expiration_date: typing.Optional[dt.datetime] = OMIT, metric_period: typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriodMonthReset] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -229,6 +235,8 @@ def create_company_override( value_type : CreateCompanyOverrideRequestBodyValueType + credit_consumption_rate : typing.Optional[float] + expiration_date : typing.Optional[dt.datetime] metric_period : typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriod] @@ -237,6 +245,8 @@ def create_company_override( value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] @@ -254,11 +264,13 @@ def create_company_override( method="POST", json={ "company_id": company_id, + "credit_consumption_rate": credit_consumption_rate, "expiration_date": expiration_date, "feature_id": feature_id, "metric_period": metric_period, "metric_period_month_reset": metric_period_month_reset, "value_bool": value_bool, + "value_credit_id": value_credit_id, "value_numeric": value_numeric, "value_trait_id": value_trait_id, "value_type": value_type, @@ -433,10 +445,12 @@ def update_company_override( company_override_id: str, *, value_type: UpdateCompanyOverrideRequestBodyValueType, + credit_consumption_rate: typing.Optional[float] = OMIT, expiration_date: typing.Optional[dt.datetime] = OMIT, metric_period: typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriodMonthReset] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -449,6 +463,8 @@ def update_company_override( value_type : UpdateCompanyOverrideRequestBodyValueType + credit_consumption_rate : typing.Optional[float] + expiration_date : typing.Optional[dt.datetime] metric_period : typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriod] @@ -457,6 +473,8 @@ def update_company_override( value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] @@ -473,10 +491,12 @@ def update_company_override( f"company-overrides/{jsonable_encoder(company_override_id)}", method="PUT", json={ + "credit_consumption_rate": credit_consumption_rate, "expiration_date": expiration_date, "metric_period": metric_period, "metric_period_month_reset": metric_period_month_reset, "value_bool": value_bool, + "value_credit_id": value_credit_id, "value_numeric": value_numeric, "value_trait_id": value_trait_id, "value_type": value_type, @@ -1661,19 +1681,26 @@ def create_plan_entitlement( feature_id: str, plan_id: str, value_type: CreatePlanEntitlementRequestBodyValueType, + billing_product_id: typing.Optional[str] = OMIT, + credit_consumption_rate: typing.Optional[float] = OMIT, currency: typing.Optional[str] = OMIT, metric_period: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, + monthly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, monthly_unit_price: typing.Optional[int] = OMIT, monthly_unit_price_decimal: typing.Optional[str] = OMIT, overage_billing_product_id: typing.Optional[str] = OMIT, - price_behavior: typing.Optional[str] = OMIT, + price_behavior: typing.Optional[CreatePlanEntitlementRequestBodyPriceBehavior] = OMIT, + price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, soft_limit: typing.Optional[int] = OMIT, + tier_mode: typing.Optional[str] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, yearly_metered_price_id: typing.Optional[str] = OMIT, + yearly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, yearly_unit_price: typing.Optional[int] = OMIT, yearly_unit_price_decimal: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -1687,6 +1714,10 @@ def create_plan_entitlement( value_type : CreatePlanEntitlementRequestBodyValueType + billing_product_id : typing.Optional[str] + + credit_consumption_rate : typing.Optional[float] + currency : typing.Optional[str] metric_period : typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriod] @@ -1695,24 +1726,35 @@ def create_plan_entitlement( monthly_metered_price_id : typing.Optional[str] + monthly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + monthly_unit_price : typing.Optional[int] monthly_unit_price_decimal : typing.Optional[str] overage_billing_product_id : typing.Optional[str] - price_behavior : typing.Optional[str] + price_behavior : typing.Optional[CreatePlanEntitlementRequestBodyPriceBehavior] + + price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + Use MonthlyPriceTiers or YearlyPriceTiers instead soft_limit : typing.Optional[int] + tier_mode : typing.Optional[str] + value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] yearly_metered_price_id : typing.Optional[str] + yearly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + yearly_unit_price : typing.Optional[int] yearly_unit_price_decimal : typing.Optional[str] @@ -1729,22 +1771,39 @@ def create_plan_entitlement( "plan-entitlements", method="POST", json={ + "billing_product_id": billing_product_id, + "credit_consumption_rate": credit_consumption_rate, "currency": currency, "feature_id": feature_id, "metric_period": metric_period, "metric_period_month_reset": metric_period_month_reset, "monthly_metered_price_id": monthly_metered_price_id, + "monthly_price_tiers": convert_and_respect_annotation_metadata( + object_=monthly_price_tiers, + annotation=typing.Sequence[CreatePriceTierRequestBody], + direction="write", + ), "monthly_unit_price": monthly_unit_price, "monthly_unit_price_decimal": monthly_unit_price_decimal, "overage_billing_product_id": overage_billing_product_id, "plan_id": plan_id, "price_behavior": price_behavior, + "price_tiers": convert_and_respect_annotation_metadata( + object_=price_tiers, annotation=typing.Sequence[CreatePriceTierRequestBody], direction="write" + ), "soft_limit": soft_limit, + "tier_mode": tier_mode, "value_bool": value_bool, + "value_credit_id": value_credit_id, "value_numeric": value_numeric, "value_trait_id": value_trait_id, "value_type": value_type, "yearly_metered_price_id": yearly_metered_price_id, + "yearly_price_tiers": convert_and_respect_annotation_metadata( + object_=yearly_price_tiers, + annotation=typing.Sequence[CreatePriceTierRequestBody], + direction="write", + ), "yearly_unit_price": yearly_unit_price, "yearly_unit_price_decimal": yearly_unit_price_decimal, }, @@ -1918,19 +1977,26 @@ def update_plan_entitlement( plan_entitlement_id: str, *, value_type: UpdatePlanEntitlementRequestBodyValueType, + billing_product_id: typing.Optional[str] = OMIT, + credit_consumption_rate: typing.Optional[float] = OMIT, currency: typing.Optional[str] = OMIT, metric_period: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, + monthly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, monthly_unit_price: typing.Optional[int] = OMIT, monthly_unit_price_decimal: typing.Optional[str] = OMIT, overage_billing_product_id: typing.Optional[str] = OMIT, - price_behavior: typing.Optional[str] = OMIT, + price_behavior: typing.Optional[UpdatePlanEntitlementRequestBodyPriceBehavior] = OMIT, + price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, soft_limit: typing.Optional[int] = OMIT, + tier_mode: typing.Optional[str] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, yearly_metered_price_id: typing.Optional[str] = OMIT, + yearly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, yearly_unit_price: typing.Optional[int] = OMIT, yearly_unit_price_decimal: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -1943,6 +2009,10 @@ def update_plan_entitlement( value_type : UpdatePlanEntitlementRequestBodyValueType + billing_product_id : typing.Optional[str] + + credit_consumption_rate : typing.Optional[float] + currency : typing.Optional[str] metric_period : typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriod] @@ -1951,24 +2021,35 @@ def update_plan_entitlement( monthly_metered_price_id : typing.Optional[str] + monthly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + monthly_unit_price : typing.Optional[int] monthly_unit_price_decimal : typing.Optional[str] overage_billing_product_id : typing.Optional[str] - price_behavior : typing.Optional[str] + price_behavior : typing.Optional[UpdatePlanEntitlementRequestBodyPriceBehavior] + + price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + Use MonthlyPriceTiers or YearlyPriceTiers instead soft_limit : typing.Optional[int] + tier_mode : typing.Optional[str] + value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] yearly_metered_price_id : typing.Optional[str] + yearly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + yearly_unit_price : typing.Optional[int] yearly_unit_price_decimal : typing.Optional[str] @@ -1985,20 +2066,37 @@ def update_plan_entitlement( f"plan-entitlements/{jsonable_encoder(plan_entitlement_id)}", method="PUT", json={ + "billing_product_id": billing_product_id, + "credit_consumption_rate": credit_consumption_rate, "currency": currency, "metric_period": metric_period, "metric_period_month_reset": metric_period_month_reset, "monthly_metered_price_id": monthly_metered_price_id, + "monthly_price_tiers": convert_and_respect_annotation_metadata( + object_=monthly_price_tiers, + annotation=typing.Sequence[CreatePriceTierRequestBody], + direction="write", + ), "monthly_unit_price": monthly_unit_price, "monthly_unit_price_decimal": monthly_unit_price_decimal, "overage_billing_product_id": overage_billing_product_id, "price_behavior": price_behavior, + "price_tiers": convert_and_respect_annotation_metadata( + object_=price_tiers, annotation=typing.Sequence[CreatePriceTierRequestBody], direction="write" + ), "soft_limit": soft_limit, + "tier_mode": tier_mode, "value_bool": value_bool, + "value_credit_id": value_credit_id, "value_numeric": value_numeric, "value_trait_id": value_trait_id, "value_type": value_type, "yearly_metered_price_id": yearly_metered_price_id, + "yearly_price_tiers": convert_and_respect_annotation_metadata( + object_=yearly_price_tiers, + annotation=typing.Sequence[CreatePriceTierRequestBody], + direction="write", + ), "yearly_unit_price": yearly_unit_price, "yearly_unit_price_decimal": yearly_unit_price_decimal, }, @@ -2561,10 +2659,12 @@ async def create_company_override( company_id: str, feature_id: str, value_type: CreateCompanyOverrideRequestBodyValueType, + credit_consumption_rate: typing.Optional[float] = OMIT, expiration_date: typing.Optional[dt.datetime] = OMIT, metric_period: typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriodMonthReset] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -2578,6 +2678,8 @@ async def create_company_override( value_type : CreateCompanyOverrideRequestBodyValueType + credit_consumption_rate : typing.Optional[float] + expiration_date : typing.Optional[dt.datetime] metric_period : typing.Optional[CreateCompanyOverrideRequestBodyMetricPeriod] @@ -2586,6 +2688,8 @@ async def create_company_override( value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] @@ -2603,11 +2707,13 @@ async def create_company_override( method="POST", json={ "company_id": company_id, + "credit_consumption_rate": credit_consumption_rate, "expiration_date": expiration_date, "feature_id": feature_id, "metric_period": metric_period, "metric_period_month_reset": metric_period_month_reset, "value_bool": value_bool, + "value_credit_id": value_credit_id, "value_numeric": value_numeric, "value_trait_id": value_trait_id, "value_type": value_type, @@ -2782,10 +2888,12 @@ async def update_company_override( company_override_id: str, *, value_type: UpdateCompanyOverrideRequestBodyValueType, + credit_consumption_rate: typing.Optional[float] = OMIT, expiration_date: typing.Optional[dt.datetime] = OMIT, metric_period: typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriodMonthReset] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -2798,6 +2906,8 @@ async def update_company_override( value_type : UpdateCompanyOverrideRequestBodyValueType + credit_consumption_rate : typing.Optional[float] + expiration_date : typing.Optional[dt.datetime] metric_period : typing.Optional[UpdateCompanyOverrideRequestBodyMetricPeriod] @@ -2806,6 +2916,8 @@ async def update_company_override( value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] @@ -2822,10 +2934,12 @@ async def update_company_override( f"company-overrides/{jsonable_encoder(company_override_id)}", method="PUT", json={ + "credit_consumption_rate": credit_consumption_rate, "expiration_date": expiration_date, "metric_period": metric_period, "metric_period_month_reset": metric_period_month_reset, "value_bool": value_bool, + "value_credit_id": value_credit_id, "value_numeric": value_numeric, "value_trait_id": value_trait_id, "value_type": value_type, @@ -4010,19 +4124,26 @@ async def create_plan_entitlement( feature_id: str, plan_id: str, value_type: CreatePlanEntitlementRequestBodyValueType, + billing_product_id: typing.Optional[str] = OMIT, + credit_consumption_rate: typing.Optional[float] = OMIT, currency: typing.Optional[str] = OMIT, metric_period: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, + monthly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, monthly_unit_price: typing.Optional[int] = OMIT, monthly_unit_price_decimal: typing.Optional[str] = OMIT, overage_billing_product_id: typing.Optional[str] = OMIT, - price_behavior: typing.Optional[str] = OMIT, + price_behavior: typing.Optional[CreatePlanEntitlementRequestBodyPriceBehavior] = OMIT, + price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, soft_limit: typing.Optional[int] = OMIT, + tier_mode: typing.Optional[str] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, yearly_metered_price_id: typing.Optional[str] = OMIT, + yearly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, yearly_unit_price: typing.Optional[int] = OMIT, yearly_unit_price_decimal: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -4036,6 +4157,10 @@ async def create_plan_entitlement( value_type : CreatePlanEntitlementRequestBodyValueType + billing_product_id : typing.Optional[str] + + credit_consumption_rate : typing.Optional[float] + currency : typing.Optional[str] metric_period : typing.Optional[CreatePlanEntitlementRequestBodyMetricPeriod] @@ -4044,24 +4169,35 @@ async def create_plan_entitlement( monthly_metered_price_id : typing.Optional[str] + monthly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + monthly_unit_price : typing.Optional[int] monthly_unit_price_decimal : typing.Optional[str] overage_billing_product_id : typing.Optional[str] - price_behavior : typing.Optional[str] + price_behavior : typing.Optional[CreatePlanEntitlementRequestBodyPriceBehavior] + + price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + Use MonthlyPriceTiers or YearlyPriceTiers instead soft_limit : typing.Optional[int] + tier_mode : typing.Optional[str] + value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] yearly_metered_price_id : typing.Optional[str] + yearly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + yearly_unit_price : typing.Optional[int] yearly_unit_price_decimal : typing.Optional[str] @@ -4078,22 +4214,39 @@ async def create_plan_entitlement( "plan-entitlements", method="POST", json={ + "billing_product_id": billing_product_id, + "credit_consumption_rate": credit_consumption_rate, "currency": currency, "feature_id": feature_id, "metric_period": metric_period, "metric_period_month_reset": metric_period_month_reset, "monthly_metered_price_id": monthly_metered_price_id, + "monthly_price_tiers": convert_and_respect_annotation_metadata( + object_=monthly_price_tiers, + annotation=typing.Sequence[CreatePriceTierRequestBody], + direction="write", + ), "monthly_unit_price": monthly_unit_price, "monthly_unit_price_decimal": monthly_unit_price_decimal, "overage_billing_product_id": overage_billing_product_id, "plan_id": plan_id, "price_behavior": price_behavior, + "price_tiers": convert_and_respect_annotation_metadata( + object_=price_tiers, annotation=typing.Sequence[CreatePriceTierRequestBody], direction="write" + ), "soft_limit": soft_limit, + "tier_mode": tier_mode, "value_bool": value_bool, + "value_credit_id": value_credit_id, "value_numeric": value_numeric, "value_trait_id": value_trait_id, "value_type": value_type, "yearly_metered_price_id": yearly_metered_price_id, + "yearly_price_tiers": convert_and_respect_annotation_metadata( + object_=yearly_price_tiers, + annotation=typing.Sequence[CreatePriceTierRequestBody], + direction="write", + ), "yearly_unit_price": yearly_unit_price, "yearly_unit_price_decimal": yearly_unit_price_decimal, }, @@ -4267,19 +4420,26 @@ async def update_plan_entitlement( plan_entitlement_id: str, *, value_type: UpdatePlanEntitlementRequestBodyValueType, + billing_product_id: typing.Optional[str] = OMIT, + credit_consumption_rate: typing.Optional[float] = OMIT, currency: typing.Optional[str] = OMIT, metric_period: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriod] = OMIT, metric_period_month_reset: typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset] = OMIT, monthly_metered_price_id: typing.Optional[str] = OMIT, + monthly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, monthly_unit_price: typing.Optional[int] = OMIT, monthly_unit_price_decimal: typing.Optional[str] = OMIT, overage_billing_product_id: typing.Optional[str] = OMIT, - price_behavior: typing.Optional[str] = OMIT, + price_behavior: typing.Optional[UpdatePlanEntitlementRequestBodyPriceBehavior] = OMIT, + price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, soft_limit: typing.Optional[int] = OMIT, + tier_mode: typing.Optional[str] = OMIT, value_bool: typing.Optional[bool] = OMIT, + value_credit_id: typing.Optional[str] = OMIT, value_numeric: typing.Optional[int] = OMIT, value_trait_id: typing.Optional[str] = OMIT, yearly_metered_price_id: typing.Optional[str] = OMIT, + yearly_price_tiers: typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] = OMIT, yearly_unit_price: typing.Optional[int] = OMIT, yearly_unit_price_decimal: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -4292,6 +4452,10 @@ async def update_plan_entitlement( value_type : UpdatePlanEntitlementRequestBodyValueType + billing_product_id : typing.Optional[str] + + credit_consumption_rate : typing.Optional[float] + currency : typing.Optional[str] metric_period : typing.Optional[UpdatePlanEntitlementRequestBodyMetricPeriod] @@ -4300,24 +4464,35 @@ async def update_plan_entitlement( monthly_metered_price_id : typing.Optional[str] + monthly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + monthly_unit_price : typing.Optional[int] monthly_unit_price_decimal : typing.Optional[str] overage_billing_product_id : typing.Optional[str] - price_behavior : typing.Optional[str] + price_behavior : typing.Optional[UpdatePlanEntitlementRequestBodyPriceBehavior] + + price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + Use MonthlyPriceTiers or YearlyPriceTiers instead soft_limit : typing.Optional[int] + tier_mode : typing.Optional[str] + value_bool : typing.Optional[bool] + value_credit_id : typing.Optional[str] + value_numeric : typing.Optional[int] value_trait_id : typing.Optional[str] yearly_metered_price_id : typing.Optional[str] + yearly_price_tiers : typing.Optional[typing.Sequence[CreatePriceTierRequestBody]] + yearly_unit_price : typing.Optional[int] yearly_unit_price_decimal : typing.Optional[str] @@ -4334,20 +4509,37 @@ async def update_plan_entitlement( f"plan-entitlements/{jsonable_encoder(plan_entitlement_id)}", method="PUT", json={ + "billing_product_id": billing_product_id, + "credit_consumption_rate": credit_consumption_rate, "currency": currency, "metric_period": metric_period, "metric_period_month_reset": metric_period_month_reset, "monthly_metered_price_id": monthly_metered_price_id, + "monthly_price_tiers": convert_and_respect_annotation_metadata( + object_=monthly_price_tiers, + annotation=typing.Sequence[CreatePriceTierRequestBody], + direction="write", + ), "monthly_unit_price": monthly_unit_price, "monthly_unit_price_decimal": monthly_unit_price_decimal, "overage_billing_product_id": overage_billing_product_id, "price_behavior": price_behavior, + "price_tiers": convert_and_respect_annotation_metadata( + object_=price_tiers, annotation=typing.Sequence[CreatePriceTierRequestBody], direction="write" + ), "soft_limit": soft_limit, + "tier_mode": tier_mode, "value_bool": value_bool, + "value_credit_id": value_credit_id, "value_numeric": value_numeric, "value_trait_id": value_trait_id, "value_type": value_type, "yearly_metered_price_id": yearly_metered_price_id, + "yearly_price_tiers": convert_and_respect_annotation_metadata( + object_=yearly_price_tiers, + annotation=typing.Sequence[CreatePriceTierRequestBody], + direction="write", + ), "yearly_unit_price": yearly_unit_price, "yearly_unit_price_decimal": yearly_unit_price_decimal, }, diff --git a/src/schematic/entitlements/types/__init__.py b/src/schematic/entitlements/types/__init__.py index 073081e..cff03fe 100644 --- a/src/schematic/entitlements/types/__init__.py +++ b/src/schematic/entitlements/types/__init__.py @@ -22,6 +22,7 @@ from .create_plan_entitlement_request_body_metric_period_month_reset import ( CreatePlanEntitlementRequestBodyMetricPeriodMonthReset, ) +from .create_plan_entitlement_request_body_price_behavior import CreatePlanEntitlementRequestBodyPriceBehavior from .create_plan_entitlement_request_body_value_type import CreatePlanEntitlementRequestBodyValueType from .create_plan_entitlement_response import CreatePlanEntitlementResponse from .delete_company_override_response import DeleteCompanyOverrideResponse @@ -50,6 +51,7 @@ from .update_plan_entitlement_request_body_metric_period_month_reset import ( UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset, ) +from .update_plan_entitlement_request_body_price_behavior import UpdatePlanEntitlementRequestBodyPriceBehavior from .update_plan_entitlement_request_body_value_type import UpdatePlanEntitlementRequestBodyValueType from .update_plan_entitlement_response import UpdatePlanEntitlementResponse @@ -70,6 +72,7 @@ "CreateCompanyOverrideResponse", "CreatePlanEntitlementRequestBodyMetricPeriod", "CreatePlanEntitlementRequestBodyMetricPeriodMonthReset", + "CreatePlanEntitlementRequestBodyPriceBehavior", "CreatePlanEntitlementRequestBodyValueType", "CreatePlanEntitlementResponse", "DeleteCompanyOverrideResponse", @@ -94,6 +97,7 @@ "UpdateCompanyOverrideResponse", "UpdatePlanEntitlementRequestBodyMetricPeriod", "UpdatePlanEntitlementRequestBodyMetricPeriodMonthReset", + "UpdatePlanEntitlementRequestBodyPriceBehavior", "UpdatePlanEntitlementRequestBodyValueType", "UpdatePlanEntitlementResponse", ] diff --git a/src/schematic/entitlements/types/create_company_override_request_body_value_type.py b/src/schematic/entitlements/types/create_company_override_request_body_value_type.py index 5038dbf..fa57a90 100644 --- a/src/schematic/entitlements/types/create_company_override_request_body_value_type.py +++ b/src/schematic/entitlements/types/create_company_override_request_body_value_type.py @@ -3,5 +3,5 @@ import typing CreateCompanyOverrideRequestBodyValueType = typing.Union[ - typing.Literal["boolean", "numeric", "trait", "unlimited"], typing.Any + typing.Literal["boolean", "credit", "numeric", "trait", "unlimited"], typing.Any ] diff --git a/src/schematic/entitlements/types/create_plan_entitlement_request_body_price_behavior.py b/src/schematic/entitlements/types/create_plan_entitlement_request_body_price_behavior.py new file mode 100644 index 0000000..18cd574 --- /dev/null +++ b/src/schematic/entitlements/types/create_plan_entitlement_request_body_price_behavior.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CreatePlanEntitlementRequestBodyPriceBehavior = typing.Union[ + typing.Literal["pay_as_you_go", "pay_in_advance", "overage", "credit_burndown", "tier"], typing.Any +] diff --git a/src/schematic/entitlements/types/create_plan_entitlement_request_body_value_type.py b/src/schematic/entitlements/types/create_plan_entitlement_request_body_value_type.py index 3521092..9941cf0 100644 --- a/src/schematic/entitlements/types/create_plan_entitlement_request_body_value_type.py +++ b/src/schematic/entitlements/types/create_plan_entitlement_request_body_value_type.py @@ -3,5 +3,5 @@ import typing CreatePlanEntitlementRequestBodyValueType = typing.Union[ - typing.Literal["boolean", "numeric", "trait", "unlimited"], typing.Any + typing.Literal["boolean", "credit", "numeric", "trait", "unlimited"], typing.Any ] diff --git a/src/schematic/entitlements/types/update_company_override_request_body_value_type.py b/src/schematic/entitlements/types/update_company_override_request_body_value_type.py index 1f09ef4..dfeac1c 100644 --- a/src/schematic/entitlements/types/update_company_override_request_body_value_type.py +++ b/src/schematic/entitlements/types/update_company_override_request_body_value_type.py @@ -3,5 +3,5 @@ import typing UpdateCompanyOverrideRequestBodyValueType = typing.Union[ - typing.Literal["boolean", "numeric", "trait", "unlimited"], typing.Any + typing.Literal["boolean", "credit", "numeric", "trait", "unlimited"], typing.Any ] diff --git a/src/schematic/entitlements/types/update_plan_entitlement_request_body_price_behavior.py b/src/schematic/entitlements/types/update_plan_entitlement_request_body_price_behavior.py new file mode 100644 index 0000000..9e2c88f --- /dev/null +++ b/src/schematic/entitlements/types/update_plan_entitlement_request_body_price_behavior.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +UpdatePlanEntitlementRequestBodyPriceBehavior = typing.Union[ + typing.Literal["pay_as_you_go", "pay_in_advance", "overage", "credit_burndown", "tier"], typing.Any +] diff --git a/src/schematic/entitlements/types/update_plan_entitlement_request_body_value_type.py b/src/schematic/entitlements/types/update_plan_entitlement_request_body_value_type.py index 4c5c93b..bb14f00 100644 --- a/src/schematic/entitlements/types/update_plan_entitlement_request_body_value_type.py +++ b/src/schematic/entitlements/types/update_plan_entitlement_request_body_value_type.py @@ -3,5 +3,5 @@ import typing UpdatePlanEntitlementRequestBodyValueType = typing.Union[ - typing.Literal["boolean", "numeric", "trait", "unlimited"], typing.Any + typing.Literal["boolean", "credit", "numeric", "trait", "unlimited"], typing.Any ] diff --git a/src/schematic/features/client.py b/src/schematic/features/client.py index 343960c..5bc24a3 100644 --- a/src/schematic/features/client.py +++ b/src/schematic/features/client.py @@ -359,6 +359,8 @@ def list_features( q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, without_plan_entitlement_for: typing.Optional[str] = None, + feature_type: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + boolean_require_event: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -376,6 +378,12 @@ def list_features( without_plan_entitlement_for : typing.Optional[str] Filter out features that already have a plan entitlement for the specified plan ID + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) + + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + limit : typing.Optional[int] Page limit (default 100) @@ -404,6 +412,8 @@ def list_features( q=q, without_company_override_for=without_company_override_for, without_plan_entitlement_for=without_plan_entitlement_for, + feature_type=feature_type, + boolean_require_event=boolean_require_event, limit=limit, offset=offset, request_options=request_options, @@ -638,6 +648,8 @@ def count_features( q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, without_plan_entitlement_for: typing.Optional[str] = None, + feature_type: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + boolean_require_event: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -655,6 +667,12 @@ def count_features( without_plan_entitlement_for : typing.Optional[str] Filter out features that already have a plan entitlement for the specified plan ID + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) + + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + limit : typing.Optional[int] Page limit (default 100) @@ -683,6 +701,8 @@ def count_features( q=q, without_company_override_for=without_company_override_for, without_plan_entitlement_for=without_plan_entitlement_for, + feature_type=feature_type, + boolean_require_event=boolean_require_event, limit=limit, offset=offset, request_options=request_options, @@ -1463,6 +1483,8 @@ async def list_features( q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, without_plan_entitlement_for: typing.Optional[str] = None, + feature_type: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + boolean_require_event: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -1480,6 +1502,12 @@ async def list_features( without_plan_entitlement_for : typing.Optional[str] Filter out features that already have a plan entitlement for the specified plan ID + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) + + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + limit : typing.Optional[int] Page limit (default 100) @@ -1516,6 +1544,8 @@ async def main() -> None: q=q, without_company_override_for=without_company_override_for, without_plan_entitlement_for=without_plan_entitlement_for, + feature_type=feature_type, + boolean_require_event=boolean_require_event, limit=limit, offset=offset, request_options=request_options, @@ -1782,6 +1812,8 @@ async def count_features( q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, without_plan_entitlement_for: typing.Optional[str] = None, + feature_type: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + boolean_require_event: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -1799,6 +1831,12 @@ async def count_features( without_plan_entitlement_for : typing.Optional[str] Filter out features that already have a plan entitlement for the specified plan ID + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) + + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + limit : typing.Optional[int] Page limit (default 100) @@ -1835,6 +1873,8 @@ async def main() -> None: q=q, without_company_override_for=without_company_override_for, without_plan_entitlement_for=without_plan_entitlement_for, + feature_type=feature_type, + boolean_require_event=boolean_require_event, limit=limit, offset=offset, request_options=request_options, diff --git a/src/schematic/features/raw_client.py b/src/schematic/features/raw_client.py index aeefbbb..9e1724a 100644 --- a/src/schematic/features/raw_client.py +++ b/src/schematic/features/raw_client.py @@ -583,6 +583,8 @@ def list_features( q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, without_plan_entitlement_for: typing.Optional[str] = None, + feature_type: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + boolean_require_event: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -600,6 +602,12 @@ def list_features( without_plan_entitlement_for : typing.Optional[str] Filter out features that already have a plan entitlement for the specified plan ID + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) + + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + limit : typing.Optional[int] Page limit (default 100) @@ -622,6 +630,8 @@ def list_features( "q": q, "without_company_override_for": without_company_override_for, "without_plan_entitlement_for": without_plan_entitlement_for, + "feature_type": feature_type, + "boolean_require_event": boolean_require_event, "limit": limit, "offset": offset, }, @@ -1187,6 +1197,8 @@ def count_features( q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, without_plan_entitlement_for: typing.Optional[str] = None, + feature_type: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + boolean_require_event: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -1204,6 +1216,12 @@ def count_features( without_plan_entitlement_for : typing.Optional[str] Filter out features that already have a plan entitlement for the specified plan ID + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) + + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + limit : typing.Optional[int] Page limit (default 100) @@ -1226,6 +1244,8 @@ def count_features( "q": q, "without_company_override_for": without_company_override_for, "without_plan_entitlement_for": without_plan_entitlement_for, + "feature_type": feature_type, + "boolean_require_event": boolean_require_event, "limit": limit, "offset": offset, }, @@ -2849,6 +2869,8 @@ async def list_features( q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, without_plan_entitlement_for: typing.Optional[str] = None, + feature_type: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + boolean_require_event: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -2866,6 +2888,12 @@ async def list_features( without_plan_entitlement_for : typing.Optional[str] Filter out features that already have a plan entitlement for the specified plan ID + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) + + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + limit : typing.Optional[int] Page limit (default 100) @@ -2888,6 +2916,8 @@ async def list_features( "q": q, "without_company_override_for": without_company_override_for, "without_plan_entitlement_for": without_plan_entitlement_for, + "feature_type": feature_type, + "boolean_require_event": boolean_require_event, "limit": limit, "offset": offset, }, @@ -3453,6 +3483,8 @@ async def count_features( q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, without_plan_entitlement_for: typing.Optional[str] = None, + feature_type: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + boolean_require_event: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, @@ -3470,6 +3502,12 @@ async def count_features( without_plan_entitlement_for : typing.Optional[str] Filter out features that already have a plan entitlement for the specified plan ID + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) + + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + limit : typing.Optional[int] Page limit (default 100) @@ -3492,6 +3530,8 @@ async def count_features( "q": q, "without_company_override_for": without_company_override_for, "without_plan_entitlement_for": without_plan_entitlement_for, + "feature_type": feature_type, + "boolean_require_event": boolean_require_event, "limit": limit, "offset": offset, }, diff --git a/src/schematic/features/types/count_features_params.py b/src/schematic/features/types/count_features_params.py index 13dbc7f..fff0299 100644 --- a/src/schematic/features/types/count_features_params.py +++ b/src/schematic/features/types/count_features_params.py @@ -11,6 +11,16 @@ class CountFeaturesParams(UniversalBaseModel): Input parameters """ + boolean_require_event: typing.Optional[bool] = pydantic.Field(default=None) + """ + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + """ + + feature_type: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter by one or more feature types (boolean, event, trait) + """ + ids: typing.Optional[typing.List[str]] = None limit: typing.Optional[int] = pydantic.Field(default=None) """ diff --git a/src/schematic/features/types/list_features_params.py b/src/schematic/features/types/list_features_params.py index 3b0009f..8cc78de 100644 --- a/src/schematic/features/types/list_features_params.py +++ b/src/schematic/features/types/list_features_params.py @@ -11,6 +11,16 @@ class ListFeaturesParams(UniversalBaseModel): Input parameters """ + boolean_require_event: typing.Optional[bool] = pydantic.Field(default=None) + """ + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. + """ + + feature_type: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Filter by one or more feature types (boolean, event, trait) + """ + ids: typing.Optional[typing.List[str]] = None limit: typing.Optional[int] = pydantic.Field(default=None) """ diff --git a/src/schematic/plangroups/client.py b/src/schematic/plangroups/client.py index 203cb7a..ed1701a 100644 --- a/src/schematic/plangroups/client.py +++ b/src/schematic/plangroups/client.py @@ -4,8 +4,10 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions +from ..types.compatible_plans import CompatiblePlans from ..types.custom_plan_config import CustomPlanConfig from ..types.ordered_plans_in_group import OrderedPlansInGroup +from ..types.plan_group_bundle_order import PlanGroupBundleOrder from .raw_client import AsyncRawPlangroupsClient, RawPlangroupsClient from .types.create_plan_group_response import CreatePlanGroupResponse from .types.get_plan_group_response import GetPlanGroupResponse @@ -58,7 +60,11 @@ def create_plan_group( self, *, add_on_ids: typing.Sequence[str], + ordered_add_ons: typing.Sequence[OrderedPlansInGroup], + ordered_bundle_list: typing.Sequence[PlanGroupBundleOrder], ordered_plans: typing.Sequence[OrderedPlansInGroup], + show_period_toggle: bool, + add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT, custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -70,9 +76,18 @@ def create_plan_group( Parameters ---------- add_on_ids : typing.Sequence[str] + Use OrderedAddOns instead + + ordered_add_ons : typing.Sequence[OrderedPlansInGroup] + + ordered_bundle_list : typing.Sequence[PlanGroupBundleOrder] ordered_plans : typing.Sequence[OrderedPlansInGroup] + show_period_toggle : bool + + add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]] + custom_plan_config : typing.Optional[CustomPlanConfig] custom_plan_id : typing.Optional[str] @@ -93,23 +108,38 @@ def create_plan_group( Examples -------- - from schematic import OrderedPlansInGroup, Schematic + from schematic import OrderedPlansInGroup, PlanGroupBundleOrder, Schematic client = Schematic( api_key="YOUR_API_KEY", ) client.plangroups.create_plan_group( add_on_ids=["add_on_ids"], + ordered_add_ons=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], + ordered_bundle_list=[ + PlanGroupBundleOrder( + bundle_id="bundleId", + ) + ], ordered_plans=[ OrderedPlansInGroup( plan_id="plan_id", ) ], + show_period_toggle=True, ) """ _response = self._raw_client.create_plan_group( add_on_ids=add_on_ids, + ordered_add_ons=ordered_add_ons, + ordered_bundle_list=ordered_bundle_list, ordered_plans=ordered_plans, + show_period_toggle=show_period_toggle, + add_on_compatibilities=add_on_compatibilities, custom_plan_config=custom_plan_config, custom_plan_id=custom_plan_id, default_plan_id=default_plan_id, @@ -124,7 +154,11 @@ def update_plan_group( plan_group_id: str, *, add_on_ids: typing.Sequence[str], + ordered_add_ons: typing.Sequence[OrderedPlansInGroup], + ordered_bundle_list: typing.Sequence[PlanGroupBundleOrder], ordered_plans: typing.Sequence[OrderedPlansInGroup], + show_period_toggle: bool, + add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT, custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -139,9 +173,18 @@ def update_plan_group( plan_group_id add_on_ids : typing.Sequence[str] + Use OrderedAddOns instead + + ordered_add_ons : typing.Sequence[OrderedPlansInGroup] + + ordered_bundle_list : typing.Sequence[PlanGroupBundleOrder] ordered_plans : typing.Sequence[OrderedPlansInGroup] + show_period_toggle : bool + + add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]] + custom_plan_config : typing.Optional[CustomPlanConfig] custom_plan_id : typing.Optional[str] @@ -162,7 +205,7 @@ def update_plan_group( Examples -------- - from schematic import OrderedPlansInGroup, Schematic + from schematic import OrderedPlansInGroup, PlanGroupBundleOrder, Schematic client = Schematic( api_key="YOUR_API_KEY", @@ -170,17 +213,32 @@ def update_plan_group( client.plangroups.update_plan_group( plan_group_id="plan_group_id", add_on_ids=["add_on_ids"], + ordered_add_ons=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], + ordered_bundle_list=[ + PlanGroupBundleOrder( + bundle_id="bundleId", + ) + ], ordered_plans=[ OrderedPlansInGroup( plan_id="plan_id", ) ], + show_period_toggle=True, ) """ _response = self._raw_client.update_plan_group( plan_group_id, add_on_ids=add_on_ids, + ordered_add_ons=ordered_add_ons, + ordered_bundle_list=ordered_bundle_list, ordered_plans=ordered_plans, + show_period_toggle=show_period_toggle, + add_on_compatibilities=add_on_compatibilities, custom_plan_config=custom_plan_config, custom_plan_id=custom_plan_id, default_plan_id=default_plan_id, @@ -242,7 +300,11 @@ async def create_plan_group( self, *, add_on_ids: typing.Sequence[str], + ordered_add_ons: typing.Sequence[OrderedPlansInGroup], + ordered_bundle_list: typing.Sequence[PlanGroupBundleOrder], ordered_plans: typing.Sequence[OrderedPlansInGroup], + show_period_toggle: bool, + add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT, custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -254,9 +316,18 @@ async def create_plan_group( Parameters ---------- add_on_ids : typing.Sequence[str] + Use OrderedAddOns instead + + ordered_add_ons : typing.Sequence[OrderedPlansInGroup] + + ordered_bundle_list : typing.Sequence[PlanGroupBundleOrder] ordered_plans : typing.Sequence[OrderedPlansInGroup] + show_period_toggle : bool + + add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]] + custom_plan_config : typing.Optional[CustomPlanConfig] custom_plan_id : typing.Optional[str] @@ -279,7 +350,7 @@ async def create_plan_group( -------- import asyncio - from schematic import AsyncSchematic, OrderedPlansInGroup + from schematic import AsyncSchematic, OrderedPlansInGroup, PlanGroupBundleOrder client = AsyncSchematic( api_key="YOUR_API_KEY", @@ -289,11 +360,22 @@ async def create_plan_group( async def main() -> None: await client.plangroups.create_plan_group( add_on_ids=["add_on_ids"], + ordered_add_ons=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], + ordered_bundle_list=[ + PlanGroupBundleOrder( + bundle_id="bundleId", + ) + ], ordered_plans=[ OrderedPlansInGroup( plan_id="plan_id", ) ], + show_period_toggle=True, ) @@ -301,7 +383,11 @@ async def main() -> None: """ _response = await self._raw_client.create_plan_group( add_on_ids=add_on_ids, + ordered_add_ons=ordered_add_ons, + ordered_bundle_list=ordered_bundle_list, ordered_plans=ordered_plans, + show_period_toggle=show_period_toggle, + add_on_compatibilities=add_on_compatibilities, custom_plan_config=custom_plan_config, custom_plan_id=custom_plan_id, default_plan_id=default_plan_id, @@ -316,7 +402,11 @@ async def update_plan_group( plan_group_id: str, *, add_on_ids: typing.Sequence[str], + ordered_add_ons: typing.Sequence[OrderedPlansInGroup], + ordered_bundle_list: typing.Sequence[PlanGroupBundleOrder], ordered_plans: typing.Sequence[OrderedPlansInGroup], + show_period_toggle: bool, + add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT, custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -331,9 +421,18 @@ async def update_plan_group( plan_group_id add_on_ids : typing.Sequence[str] + Use OrderedAddOns instead + + ordered_add_ons : typing.Sequence[OrderedPlansInGroup] + + ordered_bundle_list : typing.Sequence[PlanGroupBundleOrder] ordered_plans : typing.Sequence[OrderedPlansInGroup] + show_period_toggle : bool + + add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]] + custom_plan_config : typing.Optional[CustomPlanConfig] custom_plan_id : typing.Optional[str] @@ -356,7 +455,7 @@ async def update_plan_group( -------- import asyncio - from schematic import AsyncSchematic, OrderedPlansInGroup + from schematic import AsyncSchematic, OrderedPlansInGroup, PlanGroupBundleOrder client = AsyncSchematic( api_key="YOUR_API_KEY", @@ -367,11 +466,22 @@ async def main() -> None: await client.plangroups.update_plan_group( plan_group_id="plan_group_id", add_on_ids=["add_on_ids"], + ordered_add_ons=[ + OrderedPlansInGroup( + plan_id="plan_id", + ) + ], + ordered_bundle_list=[ + PlanGroupBundleOrder( + bundle_id="bundleId", + ) + ], ordered_plans=[ OrderedPlansInGroup( plan_id="plan_id", ) ], + show_period_toggle=True, ) @@ -380,7 +490,11 @@ async def main() -> None: _response = await self._raw_client.update_plan_group( plan_group_id, add_on_ids=add_on_ids, + ordered_add_ons=ordered_add_ons, + ordered_bundle_list=ordered_bundle_list, ordered_plans=ordered_plans, + show_period_toggle=show_period_toggle, + add_on_compatibilities=add_on_compatibilities, custom_plan_config=custom_plan_config, custom_plan_id=custom_plan_id, default_plan_id=default_plan_id, diff --git a/src/schematic/plangroups/raw_client.py b/src/schematic/plangroups/raw_client.py index e0941c5..17e45f6 100644 --- a/src/schematic/plangroups/raw_client.py +++ b/src/schematic/plangroups/raw_client.py @@ -16,8 +16,10 @@ from ..errors.not_found_error import NotFoundError from ..errors.unauthorized_error import UnauthorizedError from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.compatible_plans import CompatiblePlans from ..types.custom_plan_config import CustomPlanConfig from ..types.ordered_plans_in_group import OrderedPlansInGroup +from ..types.plan_group_bundle_order import PlanGroupBundleOrder from .types.create_plan_group_response import CreatePlanGroupResponse from .types.get_plan_group_response import GetPlanGroupResponse from .types.update_plan_group_response import UpdatePlanGroupResponse @@ -116,7 +118,11 @@ def create_plan_group( self, *, add_on_ids: typing.Sequence[str], + ordered_add_ons: typing.Sequence[OrderedPlansInGroup], + ordered_bundle_list: typing.Sequence[PlanGroupBundleOrder], ordered_plans: typing.Sequence[OrderedPlansInGroup], + show_period_toggle: bool, + add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT, custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -128,9 +134,18 @@ def create_plan_group( Parameters ---------- add_on_ids : typing.Sequence[str] + Use OrderedAddOns instead + + ordered_add_ons : typing.Sequence[OrderedPlansInGroup] + + ordered_bundle_list : typing.Sequence[PlanGroupBundleOrder] ordered_plans : typing.Sequence[OrderedPlansInGroup] + show_period_toggle : bool + + add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]] + custom_plan_config : typing.Optional[CustomPlanConfig] custom_plan_id : typing.Optional[str] @@ -153,15 +168,25 @@ def create_plan_group( "plan-groups", method="POST", json={ + "add_on_compatibilities": convert_and_respect_annotation_metadata( + object_=add_on_compatibilities, annotation=typing.Sequence[CompatiblePlans], direction="write" + ), "add_on_ids": add_on_ids, "custom_plan_config": convert_and_respect_annotation_metadata( object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" ), "custom_plan_id": custom_plan_id, "default_plan_id": default_plan_id, + "ordered_add_ons": convert_and_respect_annotation_metadata( + object_=ordered_add_ons, annotation=typing.Sequence[OrderedPlansInGroup], direction="write" + ), + "ordered_bundle_list": convert_and_respect_annotation_metadata( + object_=ordered_bundle_list, annotation=typing.Sequence[PlanGroupBundleOrder], direction="write" + ), "ordered_plans": convert_and_respect_annotation_metadata( object_=ordered_plans, annotation=typing.Sequence[OrderedPlansInGroup], direction="write" ), + "show_period_toggle": show_period_toggle, "trial_days": trial_days, "trial_payment_method_required": trial_payment_method_required, }, @@ -250,7 +275,11 @@ def update_plan_group( plan_group_id: str, *, add_on_ids: typing.Sequence[str], + ordered_add_ons: typing.Sequence[OrderedPlansInGroup], + ordered_bundle_list: typing.Sequence[PlanGroupBundleOrder], ordered_plans: typing.Sequence[OrderedPlansInGroup], + show_period_toggle: bool, + add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT, custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -265,9 +294,18 @@ def update_plan_group( plan_group_id add_on_ids : typing.Sequence[str] + Use OrderedAddOns instead + + ordered_add_ons : typing.Sequence[OrderedPlansInGroup] + + ordered_bundle_list : typing.Sequence[PlanGroupBundleOrder] ordered_plans : typing.Sequence[OrderedPlansInGroup] + show_period_toggle : bool + + add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]] + custom_plan_config : typing.Optional[CustomPlanConfig] custom_plan_id : typing.Optional[str] @@ -290,15 +328,25 @@ def update_plan_group( f"plan-groups/{jsonable_encoder(plan_group_id)}", method="PUT", json={ + "add_on_compatibilities": convert_and_respect_annotation_metadata( + object_=add_on_compatibilities, annotation=typing.Sequence[CompatiblePlans], direction="write" + ), "add_on_ids": add_on_ids, "custom_plan_config": convert_and_respect_annotation_metadata( object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" ), "custom_plan_id": custom_plan_id, "default_plan_id": default_plan_id, + "ordered_add_ons": convert_and_respect_annotation_metadata( + object_=ordered_add_ons, annotation=typing.Sequence[OrderedPlansInGroup], direction="write" + ), + "ordered_bundle_list": convert_and_respect_annotation_metadata( + object_=ordered_bundle_list, annotation=typing.Sequence[PlanGroupBundleOrder], direction="write" + ), "ordered_plans": convert_and_respect_annotation_metadata( object_=ordered_plans, annotation=typing.Sequence[OrderedPlansInGroup], direction="write" ), + "show_period_toggle": show_period_toggle, "trial_days": trial_days, "trial_payment_method_required": trial_payment_method_required, }, @@ -473,7 +521,11 @@ async def create_plan_group( self, *, add_on_ids: typing.Sequence[str], + ordered_add_ons: typing.Sequence[OrderedPlansInGroup], + ordered_bundle_list: typing.Sequence[PlanGroupBundleOrder], ordered_plans: typing.Sequence[OrderedPlansInGroup], + show_period_toggle: bool, + add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT, custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -485,9 +537,18 @@ async def create_plan_group( Parameters ---------- add_on_ids : typing.Sequence[str] + Use OrderedAddOns instead + + ordered_add_ons : typing.Sequence[OrderedPlansInGroup] + + ordered_bundle_list : typing.Sequence[PlanGroupBundleOrder] ordered_plans : typing.Sequence[OrderedPlansInGroup] + show_period_toggle : bool + + add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]] + custom_plan_config : typing.Optional[CustomPlanConfig] custom_plan_id : typing.Optional[str] @@ -510,15 +571,25 @@ async def create_plan_group( "plan-groups", method="POST", json={ + "add_on_compatibilities": convert_and_respect_annotation_metadata( + object_=add_on_compatibilities, annotation=typing.Sequence[CompatiblePlans], direction="write" + ), "add_on_ids": add_on_ids, "custom_plan_config": convert_and_respect_annotation_metadata( object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" ), "custom_plan_id": custom_plan_id, "default_plan_id": default_plan_id, + "ordered_add_ons": convert_and_respect_annotation_metadata( + object_=ordered_add_ons, annotation=typing.Sequence[OrderedPlansInGroup], direction="write" + ), + "ordered_bundle_list": convert_and_respect_annotation_metadata( + object_=ordered_bundle_list, annotation=typing.Sequence[PlanGroupBundleOrder], direction="write" + ), "ordered_plans": convert_and_respect_annotation_metadata( object_=ordered_plans, annotation=typing.Sequence[OrderedPlansInGroup], direction="write" ), + "show_period_toggle": show_period_toggle, "trial_days": trial_days, "trial_payment_method_required": trial_payment_method_required, }, @@ -607,7 +678,11 @@ async def update_plan_group( plan_group_id: str, *, add_on_ids: typing.Sequence[str], + ordered_add_ons: typing.Sequence[OrderedPlansInGroup], + ordered_bundle_list: typing.Sequence[PlanGroupBundleOrder], ordered_plans: typing.Sequence[OrderedPlansInGroup], + show_period_toggle: bool, + add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT, custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT, custom_plan_id: typing.Optional[str] = OMIT, default_plan_id: typing.Optional[str] = OMIT, @@ -622,9 +697,18 @@ async def update_plan_group( plan_group_id add_on_ids : typing.Sequence[str] + Use OrderedAddOns instead + + ordered_add_ons : typing.Sequence[OrderedPlansInGroup] + + ordered_bundle_list : typing.Sequence[PlanGroupBundleOrder] ordered_plans : typing.Sequence[OrderedPlansInGroup] + show_period_toggle : bool + + add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]] + custom_plan_config : typing.Optional[CustomPlanConfig] custom_plan_id : typing.Optional[str] @@ -647,15 +731,25 @@ async def update_plan_group( f"plan-groups/{jsonable_encoder(plan_group_id)}", method="PUT", json={ + "add_on_compatibilities": convert_and_respect_annotation_metadata( + object_=add_on_compatibilities, annotation=typing.Sequence[CompatiblePlans], direction="write" + ), "add_on_ids": add_on_ids, "custom_plan_config": convert_and_respect_annotation_metadata( object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" ), "custom_plan_id": custom_plan_id, "default_plan_id": default_plan_id, + "ordered_add_ons": convert_and_respect_annotation_metadata( + object_=ordered_add_ons, annotation=typing.Sequence[OrderedPlansInGroup], direction="write" + ), + "ordered_bundle_list": convert_and_respect_annotation_metadata( + object_=ordered_bundle_list, annotation=typing.Sequence[PlanGroupBundleOrder], direction="write" + ), "ordered_plans": convert_and_respect_annotation_metadata( object_=ordered_plans, annotation=typing.Sequence[OrderedPlansInGroup], direction="write" ), + "show_period_toggle": show_period_toggle, "trial_days": trial_days, "trial_payment_method_required": trial_payment_method_required, }, diff --git a/src/schematic/plans/__init__.py b/src/schematic/plans/__init__.py index 5af1e8c..64c8306 100644 --- a/src/schematic/plans/__init__.py +++ b/src/schematic/plans/__init__.py @@ -3,23 +3,16 @@ # isort: skip_file from .types import ( - CountPlanTraitsParams, - CountPlanTraitsResponse, CountPlansParams, CountPlansRequestPlanType, CountPlansResponse, CountPlansResponseParamsPlanType, CreatePlanRequestBodyPlanType, CreatePlanResponse, - CreatePlanTraitResponse, DeleteAudienceResponse, DeletePlanResponse, - DeletePlanTraitResponse, GetAudienceResponse, GetPlanResponse, - GetPlanTraitResponse, - ListPlanTraitsParams, - ListPlanTraitsResponse, ListPlansParams, ListPlansRequestPlanType, ListPlansResponse, @@ -27,29 +20,21 @@ UpdateAudienceResponse, UpdateCompanyPlansResponse, UpdatePlanResponse, - UpdatePlanTraitResponse, UpsertBillingProductPlanResponse, UpsertBillingProductRequestBodyChargeType, ) __all__ = [ - "CountPlanTraitsParams", - "CountPlanTraitsResponse", "CountPlansParams", "CountPlansRequestPlanType", "CountPlansResponse", "CountPlansResponseParamsPlanType", "CreatePlanRequestBodyPlanType", "CreatePlanResponse", - "CreatePlanTraitResponse", "DeleteAudienceResponse", "DeletePlanResponse", - "DeletePlanTraitResponse", "GetAudienceResponse", "GetPlanResponse", - "GetPlanTraitResponse", - "ListPlanTraitsParams", - "ListPlanTraitsResponse", "ListPlansParams", "ListPlansRequestPlanType", "ListPlansResponse", @@ -57,7 +42,6 @@ "UpdateAudienceResponse", "UpdateCompanyPlansResponse", "UpdatePlanResponse", - "UpdatePlanTraitResponse", "UpsertBillingProductPlanResponse", "UpsertBillingProductRequestBodyChargeType", ] diff --git a/src/schematic/plans/client.py b/src/schematic/plans/client.py index 5d645b5..fab7b6b 100644 --- a/src/schematic/plans/client.py +++ b/src/schematic/plans/client.py @@ -7,25 +7,19 @@ from ..types.create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody from ..types.create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody from .raw_client import AsyncRawPlansClient, RawPlansClient -from .types.count_plan_traits_response import CountPlanTraitsResponse from .types.count_plans_request_plan_type import CountPlansRequestPlanType from .types.count_plans_response import CountPlansResponse from .types.create_plan_request_body_plan_type import CreatePlanRequestBodyPlanType from .types.create_plan_response import CreatePlanResponse -from .types.create_plan_trait_response import CreatePlanTraitResponse from .types.delete_audience_response import DeleteAudienceResponse from .types.delete_plan_response import DeletePlanResponse -from .types.delete_plan_trait_response import DeletePlanTraitResponse from .types.get_audience_response import GetAudienceResponse from .types.get_plan_response import GetPlanResponse -from .types.get_plan_trait_response import GetPlanTraitResponse -from .types.list_plan_traits_response import ListPlanTraitsResponse from .types.list_plans_request_plan_type import ListPlansRequestPlanType from .types.list_plans_response import ListPlansResponse from .types.update_audience_response import UpdateAudienceResponse from .types.update_company_plans_response import UpdateCompanyPlansResponse from .types.update_plan_response import UpdatePlanResponse -from .types.update_plan_trait_response import UpdatePlanTraitResponse from .types.upsert_billing_product_plan_response import UpsertBillingProductPlanResponse from .types.upsert_billing_product_request_body_charge_type import UpsertBillingProductRequestBodyChargeType @@ -217,244 +211,6 @@ def delete_audience( _response = self._raw_client.delete_audience(plan_audience_id, request_options=request_options) return _response.data - def list_plan_traits( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - trait_id: typing.Optional[str] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> ListPlanTraitsResponse: - """ - Parameters - ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - plan_id : typing.Optional[str] - - trait_id : typing.Optional[str] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ListPlanTraitsResponse - OK - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.list_plan_traits() - """ - _response = self._raw_client.list_plan_traits( - ids=ids, plan_id=plan_id, trait_id=trait_id, limit=limit, offset=offset, request_options=request_options - ) - return _response.data - - def create_plan_trait( - self, *, plan_id: str, trait_id: str, trait_value: str, request_options: typing.Optional[RequestOptions] = None - ) -> CreatePlanTraitResponse: - """ - Parameters - ---------- - plan_id : str - - trait_id : str - - trait_value : str - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - CreatePlanTraitResponse - Created - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.create_plan_trait( - plan_id="plan_id", - trait_id="trait_id", - trait_value="trait_value", - ) - """ - _response = self._raw_client.create_plan_trait( - plan_id=plan_id, trait_id=trait_id, trait_value=trait_value, request_options=request_options - ) - return _response.data - - def get_plan_trait( - self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> GetPlanTraitResponse: - """ - Parameters - ---------- - plan_trait_id : str - plan_trait_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - GetPlanTraitResponse - OK - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.get_plan_trait( - plan_trait_id="plan_trait_id", - ) - """ - _response = self._raw_client.get_plan_trait(plan_trait_id, request_options=request_options) - return _response.data - - def update_plan_trait( - self, - plan_trait_id: str, - *, - plan_id: str, - trait_value: str, - request_options: typing.Optional[RequestOptions] = None, - ) -> UpdatePlanTraitResponse: - """ - Parameters - ---------- - plan_trait_id : str - plan_trait_id - - plan_id : str - - trait_value : str - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - UpdatePlanTraitResponse - OK - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.update_plan_trait( - plan_trait_id="plan_trait_id", - plan_id="plan_id", - trait_value="trait_value", - ) - """ - _response = self._raw_client.update_plan_trait( - plan_trait_id, plan_id=plan_id, trait_value=trait_value, request_options=request_options - ) - return _response.data - - def delete_plan_trait( - self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> DeletePlanTraitResponse: - """ - Parameters - ---------- - plan_trait_id : str - plan_trait_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - DeletePlanTraitResponse - OK - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.delete_plan_trait( - plan_trait_id="plan_trait_id", - ) - """ - _response = self._raw_client.delete_plan_trait(plan_trait_id, request_options=request_options) - return _response.data - - def count_plan_traits( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - trait_id: typing.Optional[str] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> CountPlanTraitsResponse: - """ - Parameters - ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - plan_id : typing.Optional[str] - - trait_id : typing.Optional[str] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - CountPlanTraitsResponse - OK - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.count_plan_traits() - """ - _response = self._raw_client.count_plan_traits( - ids=ids, plan_id=plan_id, trait_id=trait_id, limit=limit, offset=offset, request_options=request_options - ) - return _response.data - def list_plans( self, *, @@ -1061,292 +817,6 @@ async def main() -> None: _response = await self._raw_client.delete_audience(plan_audience_id, request_options=request_options) return _response.data - async def list_plan_traits( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - trait_id: typing.Optional[str] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> ListPlanTraitsResponse: - """ - Parameters - ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - plan_id : typing.Optional[str] - - trait_id : typing.Optional[str] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ListPlanTraitsResponse - OK - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.list_plan_traits() - - - asyncio.run(main()) - """ - _response = await self._raw_client.list_plan_traits( - ids=ids, plan_id=plan_id, trait_id=trait_id, limit=limit, offset=offset, request_options=request_options - ) - return _response.data - - async def create_plan_trait( - self, *, plan_id: str, trait_id: str, trait_value: str, request_options: typing.Optional[RequestOptions] = None - ) -> CreatePlanTraitResponse: - """ - Parameters - ---------- - plan_id : str - - trait_id : str - - trait_value : str - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - CreatePlanTraitResponse - Created - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.create_plan_trait( - plan_id="plan_id", - trait_id="trait_id", - trait_value="trait_value", - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.create_plan_trait( - plan_id=plan_id, trait_id=trait_id, trait_value=trait_value, request_options=request_options - ) - return _response.data - - async def get_plan_trait( - self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> GetPlanTraitResponse: - """ - Parameters - ---------- - plan_trait_id : str - plan_trait_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - GetPlanTraitResponse - OK - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.get_plan_trait( - plan_trait_id="plan_trait_id", - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.get_plan_trait(plan_trait_id, request_options=request_options) - return _response.data - - async def update_plan_trait( - self, - plan_trait_id: str, - *, - plan_id: str, - trait_value: str, - request_options: typing.Optional[RequestOptions] = None, - ) -> UpdatePlanTraitResponse: - """ - Parameters - ---------- - plan_trait_id : str - plan_trait_id - - plan_id : str - - trait_value : str - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - UpdatePlanTraitResponse - OK - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.update_plan_trait( - plan_trait_id="plan_trait_id", - plan_id="plan_id", - trait_value="trait_value", - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.update_plan_trait( - plan_trait_id, plan_id=plan_id, trait_value=trait_value, request_options=request_options - ) - return _response.data - - async def delete_plan_trait( - self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> DeletePlanTraitResponse: - """ - Parameters - ---------- - plan_trait_id : str - plan_trait_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - DeletePlanTraitResponse - OK - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.delete_plan_trait( - plan_trait_id="plan_trait_id", - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.delete_plan_trait(plan_trait_id, request_options=request_options) - return _response.data - - async def count_plan_traits( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - trait_id: typing.Optional[str] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> CountPlanTraitsResponse: - """ - Parameters - ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - plan_id : typing.Optional[str] - - trait_id : typing.Optional[str] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - CountPlanTraitsResponse - OK - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.count_plan_traits() - - - asyncio.run(main()) - """ - _response = await self._raw_client.count_plan_traits( - ids=ids, plan_id=plan_id, trait_id=trait_id, limit=limit, offset=offset, request_options=request_options - ) - return _response.data - async def list_plans( self, *, diff --git a/src/schematic/plans/raw_client.py b/src/schematic/plans/raw_client.py index 3f2e3a5..d92f1d1 100644 --- a/src/schematic/plans/raw_client.py +++ b/src/schematic/plans/raw_client.py @@ -18,25 +18,19 @@ from ..types.api_error import ApiError as types_api_error_ApiError from ..types.create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody from ..types.create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody -from .types.count_plan_traits_response import CountPlanTraitsResponse from .types.count_plans_request_plan_type import CountPlansRequestPlanType from .types.count_plans_response import CountPlansResponse from .types.create_plan_request_body_plan_type import CreatePlanRequestBodyPlanType from .types.create_plan_response import CreatePlanResponse -from .types.create_plan_trait_response import CreatePlanTraitResponse from .types.delete_audience_response import DeleteAudienceResponse from .types.delete_plan_response import DeletePlanResponse -from .types.delete_plan_trait_response import DeletePlanTraitResponse from .types.get_audience_response import GetAudienceResponse from .types.get_plan_response import GetPlanResponse -from .types.get_plan_trait_response import GetPlanTraitResponse -from .types.list_plan_traits_response import ListPlanTraitsResponse from .types.list_plans_request_plan_type import ListPlansRequestPlanType from .types.list_plans_response import ListPlansResponse from .types.update_audience_response import UpdateAudienceResponse from .types.update_company_plans_response import UpdateCompanyPlansResponse from .types.update_plan_response import UpdatePlanResponse -from .types.update_plan_trait_response import UpdatePlanTraitResponse from .types.upsert_billing_product_plan_response import UpsertBillingProductPlanResponse from .types.upsert_billing_product_request_body_charge_type import UpsertBillingProductRequestBodyChargeType @@ -463,24 +457,44 @@ def delete_audience( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def list_plan_traits( + def list_plans( self, *, + company_id: typing.Optional[str] = None, + has_product_id: typing.Optional[bool] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - trait_id: typing.Optional[str] = None, + plan_type: typing.Optional[ListPlansRequestPlanType] = None, + q: typing.Optional[str] = None, + without_entitlement_for: typing.Optional[str] = None, + without_product_id: typing.Optional[bool] = None, + without_paid_product_id: typing.Optional[bool] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ListPlanTraitsResponse]: + ) -> HttpResponse[ListPlansResponse]: """ Parameters ---------- + company_id : typing.Optional[str] + + has_product_id : typing.Optional[bool] + Filter out plans that do not have a billing product ID + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - plan_id : typing.Optional[str] + plan_type : typing.Optional[ListPlansRequestPlanType] + Filter by plan type + + q : typing.Optional[str] + + without_entitlement_for : typing.Optional[str] + Filter out plans that already have a plan entitlement for the specified feature ID + + without_product_id : typing.Optional[bool] + Filter out plans that have a billing product ID - trait_id : typing.Optional[str] + without_paid_product_id : typing.Optional[bool] + Filter out plans that have a paid billing product ID limit : typing.Optional[int] Page limit (default 100) @@ -493,16 +507,21 @@ def list_plan_traits( Returns ------- - HttpResponse[ListPlanTraitsResponse] + HttpResponse[ListPlansResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "plan-traits", + "plans", method="GET", params={ + "company_id": company_id, + "has_product_id": has_product_id, "ids": ids, - "plan_id": plan_id, - "trait_id": trait_id, + "plan_type": plan_type, + "q": q, + "without_entitlement_for": without_entitlement_for, + "without_product_id": without_product_id, + "without_paid_product_id": without_paid_product_id, "limit": limit, "offset": offset, }, @@ -511,9 +530,9 @@ def list_plan_traits( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListPlanTraitsResponse, + ListPlansResponse, parse_obj_as( - type_=ListPlanTraitsResponse, # type: ignore + type_=ListPlansResponse, # type: ignore object_=_response.json(), ), ) @@ -582,33 +601,42 @@ def list_plan_traits( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def create_plan_trait( - self, *, plan_id: str, trait_id: str, trait_value: str, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[CreatePlanTraitResponse]: + def create_plan( + self, + *, + description: str, + name: str, + plan_type: CreatePlanRequestBodyPlanType, + icon: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CreatePlanResponse]: """ Parameters ---------- - plan_id : str + description : str - trait_id : str + name : str + + plan_type : CreatePlanRequestBodyPlanType - trait_value : str + icon : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CreatePlanTraitResponse] + HttpResponse[CreatePlanResponse] Created """ _response = self._client_wrapper.httpx_client.request( - "plan-traits", + "plans", method="POST", json={ - "plan_id": plan_id, - "trait_id": trait_id, - "trait_value": trait_value, + "description": description, + "icon": icon, + "name": name, + "plan_type": plan_type, }, headers={ "content-type": "application/json", @@ -619,9 +647,9 @@ def create_plan_trait( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CreatePlanTraitResponse, + CreatePlanResponse, parse_obj_as( - type_=CreatePlanTraitResponse, # type: ignore + type_=CreatePlanResponse, # type: ignore object_=_response.json(), ), ) @@ -690,34 +718,34 @@ def create_plan_trait( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_plan_trait( - self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[GetPlanTraitResponse]: + def get_plan( + self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetPlanResponse]: """ Parameters ---------- - plan_trait_id : str - plan_trait_id + plan_id : str + plan_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[GetPlanTraitResponse] + HttpResponse[GetPlanResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"plan-traits/{jsonable_encoder(plan_trait_id)}", + f"plans/{jsonable_encoder(plan_id)}", method="GET", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetPlanTraitResponse, + GetPlanResponse, parse_obj_as( - type_=GetPlanTraitResponse, # type: ignore + type_=GetPlanResponse, # type: ignore object_=_response.json(), ), ) @@ -775,38 +803,42 @@ def get_plan_trait( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def update_plan_trait( + def update_plan( self, - plan_trait_id: str, - *, plan_id: str, - trait_value: str, + *, + name: str, + description: typing.Optional[str] = OMIT, + icon: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[UpdatePlanTraitResponse]: + ) -> HttpResponse[UpdatePlanResponse]: """ Parameters ---------- - plan_trait_id : str - plan_trait_id - plan_id : str + plan_id + + name : str - trait_value : str + description : typing.Optional[str] + + icon : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[UpdatePlanTraitResponse] + HttpResponse[UpdatePlanResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"plan-traits/{jsonable_encoder(plan_trait_id)}", + f"plans/{jsonable_encoder(plan_id)}", method="PUT", json={ - "plan_id": plan_id, - "trait_value": trait_value, + "description": description, + "icon": icon, + "name": name, }, headers={ "content-type": "application/json", @@ -817,9 +849,9 @@ def update_plan_trait( try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpdatePlanTraitResponse, + UpdatePlanResponse, parse_obj_as( - type_=UpdatePlanTraitResponse, # type: ignore + type_=UpdatePlanResponse, # type: ignore object_=_response.json(), ), ) @@ -888,34 +920,34 @@ def update_plan_trait( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def delete_plan_trait( - self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[DeletePlanTraitResponse]: + def delete_plan( + self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeletePlanResponse]: """ Parameters ---------- - plan_trait_id : str - plan_trait_id + plan_id : str + plan_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[DeletePlanTraitResponse] + HttpResponse[DeletePlanResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"plan-traits/{jsonable_encoder(plan_trait_id)}", + f"plans/{jsonable_encoder(plan_id)}", method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeletePlanTraitResponse, + DeletePlanResponse, parse_obj_as( - type_=DeletePlanTraitResponse, # type: ignore + type_=DeletePlanResponse, # type: ignore object_=_response.json(), ), ) @@ -984,57 +1016,87 @@ def delete_plan_trait( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def count_plan_traits( + def upsert_billing_product_plan( self, + plan_id: str, *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - trait_id: typing.Optional[str] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, + charge_type: UpsertBillingProductRequestBodyChargeType, + is_trialable: bool, + billing_product_id: typing.Optional[str] = OMIT, + currency: typing.Optional[str] = OMIT, + monthly_price: typing.Optional[int] = OMIT, + monthly_price_id: typing.Optional[str] = OMIT, + one_time_price: typing.Optional[int] = OMIT, + one_time_price_id: typing.Optional[str] = OMIT, + trial_days: typing.Optional[int] = OMIT, + yearly_price: typing.Optional[int] = OMIT, + yearly_price_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CountPlanTraitsResponse]: + ) -> HttpResponse[UpsertBillingProductPlanResponse]: """ Parameters ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + plan_id : str + plan_id + + charge_type : UpsertBillingProductRequestBodyChargeType - plan_id : typing.Optional[str] + is_trialable : bool - trait_id : typing.Optional[str] + billing_product_id : typing.Optional[str] - limit : typing.Optional[int] - Page limit (default 100) + currency : typing.Optional[str] - offset : typing.Optional[int] - Page offset (default 0) + monthly_price : typing.Optional[int] + + monthly_price_id : typing.Optional[str] + + one_time_price : typing.Optional[int] + + one_time_price_id : typing.Optional[str] + + trial_days : typing.Optional[int] + + yearly_price : typing.Optional[int] + + yearly_price_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CountPlanTraitsResponse] + HttpResponse[UpsertBillingProductPlanResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "plan-traits/count", - method="GET", - params={ - "ids": ids, - "plan_id": plan_id, - "trait_id": trait_id, - "limit": limit, - "offset": offset, + f"plans/{jsonable_encoder(plan_id)}/billing_products", + method="PUT", + json={ + "billing_product_id": billing_product_id, + "charge_type": charge_type, + "currency": currency, + "is_trialable": is_trialable, + "monthly_price": monthly_price, + "monthly_price_id": monthly_price_id, + "one_time_price": one_time_price, + "one_time_price_id": one_time_price_id, + "trial_days": trial_days, + "yearly_price": yearly_price, + "yearly_price_id": yearly_price_id, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountPlanTraitsResponse, + UpsertBillingProductPlanResponse, parse_obj_as( - type_=CountPlanTraitsResponse, # type: ignore + type_=UpsertBillingProductPlanResponse, # type: ignore object_=_response.json(), ), ) @@ -1103,13 +1165,13 @@ def count_plan_traits( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def list_plans( + def count_plans( self, *, company_id: typing.Optional[str] = None, has_product_id: typing.Optional[bool] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_type: typing.Optional[ListPlansRequestPlanType] = None, + plan_type: typing.Optional[CountPlansRequestPlanType] = None, q: typing.Optional[str] = None, without_entitlement_for: typing.Optional[str] = None, without_product_id: typing.Optional[bool] = None, @@ -1117,7 +1179,7 @@ def list_plans( limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ListPlansResponse]: + ) -> HttpResponse[CountPlansResponse]: """ Parameters ---------- @@ -1128,7 +1190,7 @@ def list_plans( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - plan_type : typing.Optional[ListPlansRequestPlanType] + plan_type : typing.Optional[CountPlansRequestPlanType] Filter by plan type q : typing.Optional[str] @@ -1153,11 +1215,11 @@ def list_plans( Returns ------- - HttpResponse[ListPlansResponse] + HttpResponse[CountPlansResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "plans", + "plans/count", method="GET", params={ "company_id": company_id, @@ -1176,9 +1238,9 @@ def list_plans( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListPlansResponse, + CountPlansResponse, parse_obj_as( - type_=ListPlansResponse, # type: ignore + type_=CountPlansResponse, # type: ignore object_=_response.json(), ), ) @@ -1247,42 +1309,43 @@ def list_plans( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def create_plan( + +class AsyncRawPlansClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def update_company_plans( self, + company_plan_id: str, *, - description: str, - name: str, - plan_type: CreatePlanRequestBodyPlanType, - icon: typing.Optional[str] = OMIT, + add_on_ids: typing.Sequence[str], + base_plan_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CreatePlanResponse]: + ) -> AsyncHttpResponse[UpdateCompanyPlansResponse]: """ Parameters ---------- - description : str - - name : str + company_plan_id : str + company_plan_id - plan_type : CreatePlanRequestBodyPlanType + add_on_ids : typing.Sequence[str] - icon : typing.Optional[str] + base_plan_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CreatePlanResponse] - Created + AsyncHttpResponse[UpdateCompanyPlansResponse] + OK """ - _response = self._client_wrapper.httpx_client.request( - "plans", - method="POST", + _response = await self._client_wrapper.httpx_client.request( + f"company-plans/{jsonable_encoder(company_plan_id)}", + method="PUT", json={ - "description": description, - "icon": icon, - "name": name, - "plan_type": plan_type, + "add_on_ids": add_on_ids, + "base_plan_id": base_plan_id, }, headers={ "content-type": "application/json", @@ -1293,13 +1356,13 @@ def create_plan( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CreatePlanResponse, + UpdateCompanyPlansResponse, parse_obj_as( - type_=CreatePlanResponse, # type: ignore + type_=UpdateCompanyPlansResponse, # type: ignore object_=_response.json(), ), ) - return HttpResponse(response=_response, data=_data) + return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -1364,38 +1427,38 @@ def create_plan( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_plan( - self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[GetPlanResponse]: + async def get_audience( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetAudienceResponse]: """ Parameters ---------- - plan_id : str - plan_id + plan_audience_id : str + plan_audience_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[GetPlanResponse] + AsyncHttpResponse[GetAudienceResponse] OK """ - _response = self._client_wrapper.httpx_client.request( - f"plans/{jsonable_encoder(plan_id)}", + _response = await self._client_wrapper.httpx_client.request( + f"plan-audiences/{jsonable_encoder(plan_audience_id)}", method="GET", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetPlanResponse, + GetAudienceResponse, parse_obj_as( - type_=GetPlanResponse, # type: ignore + type_=GetAudienceResponse, # type: ignore object_=_response.json(), ), ) - return HttpResponse(response=_response, data=_data) + return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 401: raise UnauthorizedError( headers=dict(_response.headers), @@ -1449,1276 +1512,46 @@ def get_plan( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def update_plan( + async def update_audience( self, - plan_id: str, + plan_audience_id: str, *, - name: str, - description: typing.Optional[str] = OMIT, - icon: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[UpdatePlanResponse]: - """ - Parameters - ---------- - plan_id : str - plan_id - - name : str - - description : typing.Optional[str] - - icon : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[UpdatePlanResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - f"plans/{jsonable_encoder(plan_id)}", - method="PUT", - json={ - "description": description, - "icon": icon, - "name": name, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - UpdatePlanResponse, - parse_obj_as( - type_=UpdatePlanResponse, # type: ignore - object_=_response.json(), - ), - ) - return HttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - def delete_plan( - self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[DeletePlanResponse]: - """ - Parameters - ---------- - plan_id : str - plan_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[DeletePlanResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - f"plans/{jsonable_encoder(plan_id)}", - method="DELETE", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - DeletePlanResponse, - parse_obj_as( - type_=DeletePlanResponse, # type: ignore - object_=_response.json(), - ), - ) - return HttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - def upsert_billing_product_plan( - self, - plan_id: str, - *, - charge_type: UpsertBillingProductRequestBodyChargeType, - is_trialable: bool, - billing_product_id: typing.Optional[str] = OMIT, - currency: typing.Optional[str] = OMIT, - monthly_price: typing.Optional[int] = OMIT, - monthly_price_id: typing.Optional[str] = OMIT, - one_time_price: typing.Optional[int] = OMIT, - one_time_price_id: typing.Optional[str] = OMIT, - trial_days: typing.Optional[int] = OMIT, - yearly_price: typing.Optional[int] = OMIT, - yearly_price_id: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[UpsertBillingProductPlanResponse]: - """ - Parameters - ---------- - plan_id : str - plan_id - - charge_type : UpsertBillingProductRequestBodyChargeType - - is_trialable : bool - - billing_product_id : typing.Optional[str] - - currency : typing.Optional[str] - - monthly_price : typing.Optional[int] - - monthly_price_id : typing.Optional[str] - - one_time_price : typing.Optional[int] - - one_time_price_id : typing.Optional[str] - - trial_days : typing.Optional[int] - - yearly_price : typing.Optional[int] - - yearly_price_id : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[UpsertBillingProductPlanResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - f"plans/{jsonable_encoder(plan_id)}/billing_products", - method="PUT", - json={ - "billing_product_id": billing_product_id, - "charge_type": charge_type, - "currency": currency, - "is_trialable": is_trialable, - "monthly_price": monthly_price, - "monthly_price_id": monthly_price_id, - "one_time_price": one_time_price, - "one_time_price_id": one_time_price_id, - "trial_days": trial_days, - "yearly_price": yearly_price, - "yearly_price_id": yearly_price_id, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - UpsertBillingProductPlanResponse, - parse_obj_as( - type_=UpsertBillingProductPlanResponse, # type: ignore - object_=_response.json(), - ), - ) - return HttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - def count_plans( - self, - *, - company_id: typing.Optional[str] = None, - has_product_id: typing.Optional[bool] = None, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_type: typing.Optional[CountPlansRequestPlanType] = None, - q: typing.Optional[str] = None, - without_entitlement_for: typing.Optional[str] = None, - without_product_id: typing.Optional[bool] = None, - without_paid_product_id: typing.Optional[bool] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CountPlansResponse]: - """ - Parameters - ---------- - company_id : typing.Optional[str] - - has_product_id : typing.Optional[bool] - Filter out plans that do not have a billing product ID - - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - plan_type : typing.Optional[CountPlansRequestPlanType] - Filter by plan type - - q : typing.Optional[str] - - without_entitlement_for : typing.Optional[str] - Filter out plans that already have a plan entitlement for the specified feature ID - - without_product_id : typing.Optional[bool] - Filter out plans that have a billing product ID - - without_paid_product_id : typing.Optional[bool] - Filter out plans that have a paid billing product ID - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[CountPlansResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - "plans/count", - method="GET", - params={ - "company_id": company_id, - "has_product_id": has_product_id, - "ids": ids, - "plan_type": plan_type, - "q": q, - "without_entitlement_for": without_entitlement_for, - "without_product_id": without_product_id, - "without_paid_product_id": without_paid_product_id, - "limit": limit, - "offset": offset, - }, - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - CountPlansResponse, - parse_obj_as( - type_=CountPlansResponse, # type: ignore - object_=_response.json(), - ), - ) - return HttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - -class AsyncRawPlansClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._client_wrapper = client_wrapper - - async def update_company_plans( - self, - company_plan_id: str, - *, - add_on_ids: typing.Sequence[str], - base_plan_id: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[UpdateCompanyPlansResponse]: - """ - Parameters - ---------- - company_plan_id : str - company_plan_id - - add_on_ids : typing.Sequence[str] - - base_plan_id : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[UpdateCompanyPlansResponse] - OK - """ - _response = await self._client_wrapper.httpx_client.request( - f"company-plans/{jsonable_encoder(company_plan_id)}", - method="PUT", - json={ - "add_on_ids": add_on_ids, - "base_plan_id": base_plan_id, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - UpdateCompanyPlansResponse, - parse_obj_as( - type_=UpdateCompanyPlansResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def get_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[GetAudienceResponse]: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[GetAudienceResponse] - OK - """ - _response = await self._client_wrapper.httpx_client.request( - f"plan-audiences/{jsonable_encoder(plan_audience_id)}", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - GetAudienceResponse, - parse_obj_as( - type_=GetAudienceResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 401: - raise UnauthorizedError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def update_audience( - self, - plan_audience_id: str, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[UpdateAudienceResponse]: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[UpdateAudienceResponse] - OK - """ - _response = await self._client_wrapper.httpx_client.request( - f"plan-audiences/{jsonable_encoder(plan_audience_id)}", - method="PUT", - json={ - "condition_groups": convert_and_respect_annotation_metadata( - object_=condition_groups, - annotation=typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - direction="write", - ), - "conditions": convert_and_respect_annotation_metadata( - object_=conditions, - annotation=typing.Sequence[CreateOrUpdateConditionRequestBody], - direction="write", - ), - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - UpdateAudienceResponse, - parse_obj_as( - type_=UpdateAudienceResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def delete_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[DeleteAudienceResponse]: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[DeleteAudienceResponse] - OK - """ - _response = await self._client_wrapper.httpx_client.request( - f"plan-audiences/{jsonable_encoder(plan_audience_id)}", - method="DELETE", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - DeleteAudienceResponse, - parse_obj_as( - type_=DeleteAudienceResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def list_plan_traits( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - trait_id: typing.Optional[str] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ListPlanTraitsResponse]: - """ - Parameters - ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - plan_id : typing.Optional[str] - - trait_id : typing.Optional[str] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[ListPlanTraitsResponse] - OK - """ - _response = await self._client_wrapper.httpx_client.request( - "plan-traits", - method="GET", - params={ - "ids": ids, - "plan_id": plan_id, - "trait_id": trait_id, - "limit": limit, - "offset": offset, - }, - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - ListPlanTraitsResponse, - parse_obj_as( - type_=ListPlanTraitsResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def create_plan_trait( - self, *, plan_id: str, trait_id: str, trait_value: str, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[CreatePlanTraitResponse]: - """ - Parameters - ---------- - plan_id : str - - trait_id : str - - trait_value : str - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[CreatePlanTraitResponse] - Created - """ - _response = await self._client_wrapper.httpx_client.request( - "plan-traits", - method="POST", - json={ - "plan_id": plan_id, - "trait_id": trait_id, - "trait_value": trait_value, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - CreatePlanTraitResponse, - parse_obj_as( - type_=CreatePlanTraitResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def get_plan_trait( - self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[GetPlanTraitResponse]: - """ - Parameters - ---------- - plan_trait_id : str - plan_trait_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[GetPlanTraitResponse] - OK - """ - _response = await self._client_wrapper.httpx_client.request( - f"plan-traits/{jsonable_encoder(plan_trait_id)}", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - GetPlanTraitResponse, - parse_obj_as( - type_=GetPlanTraitResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 401: - raise UnauthorizedError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def update_plan_trait( - self, - plan_trait_id: str, - *, - plan_id: str, - trait_value: str, + condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], + conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[UpdatePlanTraitResponse]: + ) -> AsyncHttpResponse[UpdateAudienceResponse]: """ Parameters ---------- - plan_trait_id : str - plan_trait_id + plan_audience_id : str + plan_audience_id - plan_id : str + condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - trait_value : str + conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[UpdatePlanTraitResponse] + AsyncHttpResponse[UpdateAudienceResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - f"plan-traits/{jsonable_encoder(plan_trait_id)}", + f"plan-audiences/{jsonable_encoder(plan_audience_id)}", method="PUT", json={ - "plan_id": plan_id, - "trait_value": trait_value, + "condition_groups": convert_and_respect_annotation_metadata( + object_=condition_groups, + annotation=typing.Sequence[CreateOrUpdateConditionGroupRequestBody], + direction="write", + ), + "conditions": convert_and_respect_annotation_metadata( + object_=conditions, + annotation=typing.Sequence[CreateOrUpdateConditionRequestBody], + direction="write", + ), }, headers={ "content-type": "application/json", @@ -2729,9 +1562,9 @@ async def update_plan_trait( try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpdatePlanTraitResponse, + UpdateAudienceResponse, parse_obj_as( - type_=UpdatePlanTraitResponse, # type: ignore + type_=UpdateAudienceResponse, # type: ignore object_=_response.json(), ), ) @@ -2800,153 +1633,34 @@ async def update_plan_trait( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def delete_plan_trait( - self, plan_trait_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[DeletePlanTraitResponse]: + async def delete_audience( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[DeleteAudienceResponse]: """ Parameters ---------- - plan_trait_id : str - plan_trait_id + plan_audience_id : str + plan_audience_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[DeletePlanTraitResponse] + AsyncHttpResponse[DeleteAudienceResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - f"plan-traits/{jsonable_encoder(plan_trait_id)}", + f"plan-audiences/{jsonable_encoder(plan_audience_id)}", method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeletePlanTraitResponse, - parse_obj_as( - type_=DeletePlanTraitResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=typing.cast( - types_api_error_ApiError, - parse_obj_as( - type_=types_api_error_ApiError, # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=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( - headers=dict(_response.headers), - body=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, headers=dict(_response.headers), body=_response.text - ) - raise core_api_error_ApiError( - status_code=_response.status_code, headers=dict(_response.headers), body=_response_json - ) - - async def count_plan_traits( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_id: typing.Optional[str] = None, - trait_id: typing.Optional[str] = None, - limit: typing.Optional[int] = None, - offset: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[CountPlanTraitsResponse]: - """ - Parameters - ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - plan_id : typing.Optional[str] - - trait_id : typing.Optional[str] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[CountPlanTraitsResponse] - OK - """ - _response = await self._client_wrapper.httpx_client.request( - "plan-traits/count", - method="GET", - params={ - "ids": ids, - "plan_id": plan_id, - "trait_id": trait_id, - "limit": limit, - "offset": offset, - }, - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - CountPlanTraitsResponse, + DeleteAudienceResponse, parse_obj_as( - type_=CountPlanTraitsResponse, # type: ignore + type_=DeleteAudienceResponse, # type: ignore object_=_response.json(), ), ) diff --git a/src/schematic/plans/types/__init__.py b/src/schematic/plans/types/__init__.py index 79fbb0e..52cb0e7 100644 --- a/src/schematic/plans/types/__init__.py +++ b/src/schematic/plans/types/__init__.py @@ -2,23 +2,16 @@ # isort: skip_file -from .count_plan_traits_params import CountPlanTraitsParams -from .count_plan_traits_response import CountPlanTraitsResponse from .count_plans_params import CountPlansParams from .count_plans_request_plan_type import CountPlansRequestPlanType from .count_plans_response import CountPlansResponse from .count_plans_response_params_plan_type import CountPlansResponseParamsPlanType from .create_plan_request_body_plan_type import CreatePlanRequestBodyPlanType from .create_plan_response import CreatePlanResponse -from .create_plan_trait_response import CreatePlanTraitResponse from .delete_audience_response import DeleteAudienceResponse from .delete_plan_response import DeletePlanResponse -from .delete_plan_trait_response import DeletePlanTraitResponse from .get_audience_response import GetAudienceResponse from .get_plan_response import GetPlanResponse -from .get_plan_trait_response import GetPlanTraitResponse -from .list_plan_traits_params import ListPlanTraitsParams -from .list_plan_traits_response import ListPlanTraitsResponse from .list_plans_params import ListPlansParams from .list_plans_request_plan_type import ListPlansRequestPlanType from .list_plans_response import ListPlansResponse @@ -26,28 +19,20 @@ from .update_audience_response import UpdateAudienceResponse from .update_company_plans_response import UpdateCompanyPlansResponse from .update_plan_response import UpdatePlanResponse -from .update_plan_trait_response import UpdatePlanTraitResponse from .upsert_billing_product_plan_response import UpsertBillingProductPlanResponse from .upsert_billing_product_request_body_charge_type import UpsertBillingProductRequestBodyChargeType __all__ = [ - "CountPlanTraitsParams", - "CountPlanTraitsResponse", "CountPlansParams", "CountPlansRequestPlanType", "CountPlansResponse", "CountPlansResponseParamsPlanType", "CreatePlanRequestBodyPlanType", "CreatePlanResponse", - "CreatePlanTraitResponse", "DeleteAudienceResponse", "DeletePlanResponse", - "DeletePlanTraitResponse", "GetAudienceResponse", "GetPlanResponse", - "GetPlanTraitResponse", - "ListPlanTraitsParams", - "ListPlanTraitsResponse", "ListPlansParams", "ListPlansRequestPlanType", "ListPlansResponse", @@ -55,7 +40,6 @@ "UpdateAudienceResponse", "UpdateCompanyPlansResponse", "UpdatePlanResponse", - "UpdatePlanTraitResponse", "UpsertBillingProductPlanResponse", "UpsertBillingProductRequestBodyChargeType", ] diff --git a/src/schematic/types/__init__.py b/src/schematic/types/__init__.py index 41bac73..4fa0a4e 100644 --- a/src/schematic/types/__init__.py +++ b/src/schematic/types/__init__.py @@ -9,10 +9,15 @@ from .api_key_response_data import ApiKeyResponseData from .audience_request_body import AudienceRequestBody from .billing_coupon_response_data import BillingCouponResponseData +from .billing_credit_bundle_response_data import BillingCreditBundleResponseData +from .billing_credit_bundle_view import BillingCreditBundleView +from .billing_credit_grant_response_data import BillingCreditGrantResponseData +from .billing_credit_response_data import BillingCreditResponseData from .billing_customer_response_data import BillingCustomerResponseData from .billing_customer_subscription import BillingCustomerSubscription from .billing_customer_with_subscriptions_response_data import BillingCustomerWithSubscriptionsResponseData from .billing_meter_response_data import BillingMeterResponseData +from .billing_plan_credit_grant_response_data import BillingPlanCreditGrantResponseData from .billing_price_response_data import BillingPriceResponseData from .billing_price_view import BillingPriceView from .billing_product_detail_response_data import BillingProductDetailResponseData @@ -43,6 +48,9 @@ from .company_plan_with_billing_sub_view import CompanyPlanWithBillingSubView from .company_response_data import CompanyResponseData from .company_subscription_response_data import CompanySubscriptionResponseData +from .company_view_with_feature_usage_response_data import CompanyViewWithFeatureUsageResponseData +from .compatible_plans import CompatiblePlans +from .compatible_plans_response_data import CompatiblePlansResponseData from .component_capabilities import ComponentCapabilities from .component_hydrate_response_data import ComponentHydrateResponseData from .component_preview_response_data import ComponentPreviewResponseData @@ -68,6 +76,10 @@ from .create_or_update_flag_request_body import CreateOrUpdateFlagRequestBody from .create_or_update_rule_request_body import CreateOrUpdateRuleRequestBody from .create_or_update_rule_request_body_rule_type import CreateOrUpdateRuleRequestBodyRuleType +from .create_price_tier_request_body import CreatePriceTierRequestBody +from .credit_bundle_purchase_response_data import CreditBundlePurchaseResponseData +from .credit_company_grant_view import CreditCompanyGrantView +from .credit_trigger_config import CreditTriggerConfig from .crm_deal_line_item import CrmDealLineItem from .crm_deal_response_data import CrmDealResponseData from .crm_line_item_response_data import CrmLineItemResponseData @@ -102,6 +114,7 @@ from .feature_company_user_response_data_allocation_type import FeatureCompanyUserResponseDataAllocationType from .feature_detail_response_data import FeatureDetailResponseData from .feature_response_data import FeatureResponseData +from .feature_usage_data_response_data import FeatureUsageDataResponseData from .feature_usage_detail_response_data import FeatureUsageDetailResponseData from .feature_usage_response_data import FeatureUsageResponseData from .feature_usage_response_data_allocation_type import FeatureUsageResponseDataAllocationType @@ -119,9 +132,11 @@ from .payment_method_response_data import PaymentMethodResponseData from .plan_audience_detail_response_data import PlanAudienceDetailResponseData from .plan_audience_response_data import PlanAudienceResponseData +from .plan_credit_grant_view import PlanCreditGrantView from .plan_detail_response_data import PlanDetailResponseData from .plan_entitlement_response_data import PlanEntitlementResponseData from .plan_entitlements_order import PlanEntitlementsOrder +from .plan_group_bundle_order import PlanGroupBundleOrder 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 @@ -147,6 +162,7 @@ from .stripe_embed_info import StripeEmbedInfo from .temporary_access_token_response_data import TemporaryAccessTokenResponseData from .update_add_on_request_body import UpdateAddOnRequestBody +from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody from .update_entitlement_req_common import UpdateEntitlementReqCommon from .update_entitlement_req_common_metric_period import UpdateEntitlementReqCommonMetricPeriod from .update_entitlement_req_common_metric_period_month_reset import UpdateEntitlementReqCommonMetricPeriodMonthReset @@ -158,6 +174,7 @@ from .upsert_user_request_body import UpsertUserRequestBody from .upsert_user_sub_request_body import UpsertUserSubRequestBody from .usage_based_entitlement_request_body import UsageBasedEntitlementRequestBody +from .usage_based_entitlement_request_body_price_behavior import UsageBasedEntitlementRequestBodyPriceBehavior from .usage_based_entitlement_response_data import UsageBasedEntitlementResponseData from .user_detail_response_data import UserDetailResponseData from .user_response_data import UserResponseData @@ -173,10 +190,15 @@ "ApiKeyResponseData", "AudienceRequestBody", "BillingCouponResponseData", + "BillingCreditBundleResponseData", + "BillingCreditBundleView", + "BillingCreditGrantResponseData", + "BillingCreditResponseData", "BillingCustomerResponseData", "BillingCustomerSubscription", "BillingCustomerWithSubscriptionsResponseData", "BillingMeterResponseData", + "BillingPlanCreditGrantResponseData", "BillingPriceResponseData", "BillingPriceView", "BillingProductDetailResponseData", @@ -207,6 +229,9 @@ "CompanyPlanWithBillingSubView", "CompanyResponseData", "CompanySubscriptionResponseData", + "CompanyViewWithFeatureUsageResponseData", + "CompatiblePlans", + "CompatiblePlansResponseData", "ComponentCapabilities", "ComponentHydrateResponseData", "ComponentPreviewResponseData", @@ -230,6 +255,10 @@ "CreateOrUpdateFlagRequestBody", "CreateOrUpdateRuleRequestBody", "CreateOrUpdateRuleRequestBodyRuleType", + "CreatePriceTierRequestBody", + "CreditBundlePurchaseResponseData", + "CreditCompanyGrantView", + "CreditTriggerConfig", "CrmDealLineItem", "CrmDealResponseData", "CrmLineItemResponseData", @@ -264,6 +293,7 @@ "FeatureCompanyUserResponseDataAllocationType", "FeatureDetailResponseData", "FeatureResponseData", + "FeatureUsageDataResponseData", "FeatureUsageDetailResponseData", "FeatureUsageResponseData", "FeatureUsageResponseDataAllocationType", @@ -281,9 +311,11 @@ "PaymentMethodResponseData", "PlanAudienceDetailResponseData", "PlanAudienceResponseData", + "PlanCreditGrantView", "PlanDetailResponseData", "PlanEntitlementResponseData", "PlanEntitlementsOrder", + "PlanGroupBundleOrder", "PlanGroupDetailResponseData", "PlanGroupPlanDetailResponseData", "PlanGroupPlanEntitlementsOrder", @@ -309,6 +341,7 @@ "StripeEmbedInfo", "TemporaryAccessTokenResponseData", "UpdateAddOnRequestBody", + "UpdateCreditBundleRequestBody", "UpdateEntitlementReqCommon", "UpdateEntitlementReqCommonMetricPeriod", "UpdateEntitlementReqCommonMetricPeriodMonthReset", @@ -320,6 +353,7 @@ "UpsertUserRequestBody", "UpsertUserSubRequestBody", "UsageBasedEntitlementRequestBody", + "UsageBasedEntitlementRequestBodyPriceBehavior", "UsageBasedEntitlementResponseData", "UserDetailResponseData", "UserResponseData", diff --git a/src/schematic/types/billing_credit_bundle_response_data.py b/src/schematic/types/billing_credit_bundle_response_data.py new file mode 100644 index 0000000..13c7974 --- /dev/null +++ b/src/schematic/types/billing_credit_bundle_response_data.py @@ -0,0 +1,39 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_price_response_data import BillingPriceResponseData + + +class BillingCreditBundleResponseData(UniversalBaseModel): + billing_invoice_id: typing.Optional[str] = None + bundle_type: str + created_at: dt.datetime + credit_description: typing.Optional[str] = None + credit_icon: typing.Optional[str] = None + credit_id: str + credit_name: str + expiry_type: str + expiry_unit: str + expiry_unit_count: typing.Optional[int] = None + id: str + name: str + plural_name: typing.Optional[str] = None + price: typing.Optional[BillingPriceResponseData] = None + quantity: typing.Optional[int] = None + singular_name: typing.Optional[str] = None + status: str + unit_price: typing.Optional[BillingPriceResponseData] = None + updated_at: dt.datetime + + 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/billing_credit_bundle_view.py b/src/schematic/types/billing_credit_bundle_view.py new file mode 100644 index 0000000..add1610 --- /dev/null +++ b/src/schematic/types/billing_credit_bundle_view.py @@ -0,0 +1,39 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_product_price_response_data import BillingProductPriceResponseData + + +class BillingCreditBundleView(UniversalBaseModel): + billing_invoice_id: typing.Optional[str] = None + bundle_type: str + created_at: dt.datetime + credit_description: typing.Optional[str] = None + credit_icon: typing.Optional[str] = None + credit_id: str + credit_name: str + expiry_type: str + expiry_unit: str + expiry_unit_count: typing.Optional[int] = None + id: str + name: str + plural_name: typing.Optional[str] = None + price: typing.Optional[BillingProductPriceResponseData] = None + quantity: typing.Optional[int] = None + singular_name: typing.Optional[str] = None + status: str + unit_price: typing.Optional[BillingProductPriceResponseData] = None + updated_at: dt.datetime + + 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/billing_credit_grant_response_data.py b/src/schematic/types/billing_credit_grant_response_data.py new file mode 100644 index 0000000..6f4d283 --- /dev/null +++ b/src/schematic/types/billing_credit_grant_response_data.py @@ -0,0 +1,39 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_price_response_data import BillingPriceResponseData + + +class BillingCreditGrantResponseData(UniversalBaseModel): + company_id: str + company_name: str + created_at: dt.datetime + credit_icon: typing.Optional[str] = None + credit_name: str + expires_at: typing.Optional[dt.datetime] = None + grant_reason: str + id: str + plan_id: typing.Optional[str] = None + plan_name: typing.Optional[str] = None + price: typing.Optional[BillingPriceResponseData] = None + quantity: int + quantity_remaining: float + quantity_used: float + source_label: str + updated_at: dt.datetime + valid_from: typing.Optional[dt.datetime] = None + zeroed_out_date: typing.Optional[dt.datetime] = None + zeroed_out_reason: 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: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/billing_credit_response_data.py b/src/schematic/types/billing_credit_response_data.py new file mode 100644 index 0000000..8e412d0 --- /dev/null +++ b/src/schematic/types/billing_credit_response_data.py @@ -0,0 +1,35 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_price_response_data import BillingPriceResponseData +from .billing_product_response_data import BillingProductResponseData + + +class BillingCreditResponseData(UniversalBaseModel): + burn_strategy: str + created_at: dt.datetime + default_expiry_unit: str + default_expiry_unit_count: typing.Optional[int] = None + default_rollover_policy: str + description: str + icon: typing.Optional[str] = None + id: str + name: str + plural_name: typing.Optional[str] = None + price: typing.Optional[BillingPriceResponseData] = None + product: typing.Optional[BillingProductResponseData] = None + singular_name: typing.Optional[str] = None + updated_at: dt.datetime + + 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/billing_plan_credit_grant_response_data.py b/src/schematic/types/billing_plan_credit_grant_response_data.py new file mode 100644 index 0000000..93f4916 --- /dev/null +++ b/src/schematic/types/billing_plan_credit_grant_response_data.py @@ -0,0 +1,28 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class BillingPlanCreditGrantResponseData(UniversalBaseModel): + created_at: dt.datetime + credit_amount: int + credit_id: str + id: str + plan_id: str + plan_name: str + reset_cadence: str + reset_start: str + updated_at: dt.datetime + + 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/billing_price_view.py b/src/schematic/types/billing_price_view.py index 8dba67e..ee564d2 100644 --- a/src/schematic/types/billing_price_view.py +++ b/src/schematic/types/billing_price_view.py @@ -27,6 +27,7 @@ class BillingPriceView(UniversalBaseModel): product_external_id: str product_id: str product_name: str + tiers_mode: typing.Optional[str] = None updated_at: dt.datetime usage_type: str diff --git a/src/schematic/types/billing_product_price_response_data.py b/src/schematic/types/billing_product_price_response_data.py index 117409b..b16cba5 100644 --- a/src/schematic/types/billing_product_price_response_data.py +++ b/src/schematic/types/billing_product_price_response_data.py @@ -20,6 +20,7 @@ class BillingProductPriceResponseData(UniversalBaseModel): price_decimal: typing.Optional[str] = None price_external_id: str product_external_id: str + tiers_mode: typing.Optional[str] = None updated_at: dt.datetime usage_type: str diff --git a/src/schematic/types/change_subscription_internal_request_body.py b/src/schematic/types/change_subscription_internal_request_body.py index 8fd2284..d791bcc 100644 --- a/src/schematic/types/change_subscription_internal_request_body.py +++ b/src/schematic/types/change_subscription_internal_request_body.py @@ -5,6 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .update_add_on_request_body import UpdateAddOnRequestBody +from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody from .update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody @@ -12,11 +13,13 @@ class ChangeSubscriptionInternalRequestBody(UniversalBaseModel): add_on_ids: typing.List[UpdateAddOnRequestBody] company_id: str coupon_external_id: typing.Optional[str] = None + credit_bundles: typing.List[UpdateCreditBundleRequestBody] new_plan_id: str new_price_id: str pay_in_advance: typing.List[UpdatePayInAdvanceRequestBody] payment_method_id: typing.Optional[str] = None promo_code: typing.Optional[str] = None + skip_trial: bool 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/change_subscription_request_body.py b/src/schematic/types/change_subscription_request_body.py index 308d922..0452aba 100644 --- a/src/schematic/types/change_subscription_request_body.py +++ b/src/schematic/types/change_subscription_request_body.py @@ -5,17 +5,20 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .update_add_on_request_body import UpdateAddOnRequestBody +from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody from .update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody class ChangeSubscriptionRequestBody(UniversalBaseModel): add_on_ids: typing.List[UpdateAddOnRequestBody] coupon_external_id: typing.Optional[str] = None + credit_bundles: typing.List[UpdateCreditBundleRequestBody] new_plan_id: str new_price_id: str pay_in_advance: typing.List[UpdatePayInAdvanceRequestBody] payment_method_id: typing.Optional[str] = None promo_code: typing.Optional[str] = None + skip_trial: bool 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/checkout_data_response_data.py b/src/schematic/types/checkout_data_response_data.py index 67facb5..d0f25eb 100644 --- a/src/schematic/types/checkout_data_response_data.py +++ b/src/schematic/types/checkout_data_response_data.py @@ -4,8 +4,10 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_credit_bundle_response_data import BillingCreditBundleResponseData from .company_detail_response_data import CompanyDetailResponseData from .company_subscription_response_data import CompanySubscriptionResponseData +from .credit_bundle_purchase_response_data import CreditBundlePurchaseResponseData from .feature_usage_detail_response_data import FeatureUsageDetailResponseData from .plan_detail_response_data import PlanDetailResponseData from .usage_based_entitlement_response_data import UsageBasedEntitlementResponseData @@ -19,8 +21,10 @@ class CheckoutDataResponseData(UniversalBaseModel): active_add_ons: typing.List[PlanDetailResponseData] active_plan: typing.Optional[PlanDetailResponseData] = None active_usage_based_entitlements: typing.List[UsageBasedEntitlementResponseData] + available_credit_bundles: typing.List[BillingCreditBundleResponseData] company: typing.Optional[CompanyDetailResponseData] = None feature_usage: typing.Optional[FeatureUsageDetailResponseData] = None + selected_credit_bundles: typing.List[CreditBundlePurchaseResponseData] selected_plan: typing.Optional[PlanDetailResponseData] = None selected_usage_based_entitlements: typing.List[UsageBasedEntitlementResponseData] subscription: typing.Optional[CompanySubscriptionResponseData] = None diff --git a/src/schematic/types/company_detail_response_data.py b/src/schematic/types/company_detail_response_data.py index 79642f0..988124f 100644 --- a/src/schematic/types/company_detail_response_data.py +++ b/src/schematic/types/company_detail_response_data.py @@ -16,6 +16,7 @@ class CompanyDetailResponseData(UniversalBaseModel): add_ons: typing.List[CompanyPlanWithBillingSubView] + billing_credit_balances: typing.Optional[typing.Dict[str, float]] = None billing_subscription: typing.Optional[BillingSubscriptionView] = None billing_subscriptions: typing.List[BillingSubscriptionView] created_at: dt.datetime diff --git a/src/schematic/types/company_override_response_data.py b/src/schematic/types/company_override_response_data.py index e17322b..bae3677 100644 --- a/src/schematic/types/company_override_response_data.py +++ b/src/schematic/types/company_override_response_data.py @@ -11,12 +11,9 @@ class CompanyOverrideResponseData(UniversalBaseModel): - """ - The updated resource - """ - company: typing.Optional[CompanyDetailResponseData] = None company_id: str + consumption_rate: typing.Optional[float] = None created_at: dt.datetime environment_id: str expiration_date: typing.Optional[dt.datetime] = None diff --git a/src/schematic/types/company_plan_detail_response_data.py b/src/schematic/types/company_plan_detail_response_data.py index 01b5e02..43a3d65 100644 --- a/src/schematic/types/company_plan_detail_response_data.py +++ b/src/schematic/types/company_plan_detail_response_data.py @@ -9,6 +9,7 @@ from .billing_product_detail_response_data import BillingProductDetailResponseData from .custom_plan_config import CustomPlanConfig from .feature_detail_response_data import FeatureDetailResponseData +from .plan_credit_grant_view import PlanCreditGrantView from .plan_entitlement_response_data import PlanEntitlementResponseData @@ -18,6 +19,7 @@ class CompanyPlanDetailResponseData(UniversalBaseModel): charge_type: str company_can_trial: bool company_count: int + compatible_plan_ids: typing.List[str] controlled_by: str created_at: dt.datetime current: bool @@ -28,6 +30,7 @@ class CompanyPlanDetailResponseData(UniversalBaseModel): features: typing.List[FeatureDetailResponseData] icon: str id: str + included_credit_grants: typing.List[PlanCreditGrantView] is_custom: bool is_default: bool is_free: bool diff --git a/src/schematic/types/company_view_with_feature_usage_response_data.py b/src/schematic/types/company_view_with_feature_usage_response_data.py new file mode 100644 index 0000000..a7bad6d --- /dev/null +++ b/src/schematic/types/company_view_with_feature_usage_response_data.py @@ -0,0 +1,52 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_subscription_view import BillingSubscriptionView +from .company_event_period_metrics_response_data import CompanyEventPeriodMetricsResponseData +from .company_plan_with_billing_sub_view import CompanyPlanWithBillingSubView +from .entity_key_detail_response_data import EntityKeyDetailResponseData +from .entity_trait_detail_response_data import EntityTraitDetailResponseData +from .feature_usage_data_response_data import FeatureUsageDataResponseData +from .generic_preview_object import GenericPreviewObject +from .payment_method_response_data import PaymentMethodResponseData + + +class CompanyViewWithFeatureUsageResponseData(UniversalBaseModel): + add_ons: typing.List[CompanyPlanWithBillingSubView] + billing_credit_balances: typing.Optional[typing.Dict[str, float]] = None + billing_subscription: typing.Optional[BillingSubscriptionView] = None + billing_subscriptions: typing.List[BillingSubscriptionView] + created_at: dt.datetime + default_payment_method: typing.Optional[PaymentMethodResponseData] = None + entity_traits: typing.List[EntityTraitDetailResponseData] + environment_id: str + feature_usage: typing.List[FeatureUsageDataResponseData] + id: str + keys: typing.List[EntityKeyDetailResponseData] + last_seen_at: typing.Optional[dt.datetime] = None + 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) + """ + A map of trait names to trait values + """ + + updated_at: dt.datetime + user_count: int + + 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/compatible_plans.py b/src/schematic/types/compatible_plans.py new file mode 100644 index 0000000..fd9330c --- /dev/null +++ b/src/schematic/types/compatible_plans.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CompatiblePlans(UniversalBaseModel): + compatible_plan_ids: typing.List[str] + source_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/compatible_plans_response_data.py b/src/schematic/types/compatible_plans_response_data.py new file mode 100644 index 0000000..944e4dc --- /dev/null +++ b/src/schematic/types/compatible_plans_response_data.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CompatiblePlansResponseData(UniversalBaseModel): + compatible_plan_ids: typing.List[str] + source_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/component_hydrate_response_data.py b/src/schematic/types/component_hydrate_response_data.py index b05e517..5e24517 100644 --- a/src/schematic/types/component_hydrate_response_data.py +++ b/src/schematic/types/component_hydrate_response_data.py @@ -4,11 +4,14 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_credit_bundle_view import BillingCreditBundleView from .company_detail_response_data import CompanyDetailResponseData from .company_plan_detail_response_data import CompanyPlanDetailResponseData from .company_subscription_response_data import CompanySubscriptionResponseData +from .compatible_plans import CompatiblePlans from .component_capabilities import ComponentCapabilities from .component_response_data import ComponentResponseData +from .credit_company_grant_view import CreditCompanyGrantView from .feature_usage_detail_response_data import FeatureUsageDetailResponseData from .invoice_response_data import InvoiceResponseData from .plan_detail_response_data import PlanDetailResponseData @@ -20,11 +23,15 @@ class ComponentHydrateResponseData(UniversalBaseModel): active_add_ons: typing.List[CompanyPlanDetailResponseData] active_plans: typing.List[CompanyPlanDetailResponseData] active_usage_based_entitlements: typing.List[UsageBasedEntitlementResponseData] + add_on_compatibilities: typing.List[CompatiblePlans] capabilities: typing.Optional[ComponentCapabilities] = None company: typing.Optional[CompanyDetailResponseData] = None component: typing.Optional[ComponentResponseData] = None + credit_bundles: typing.List[BillingCreditBundleView] + credit_grants: typing.List[CreditCompanyGrantView] default_plan: typing.Optional[PlanDetailResponseData] = None feature_usage: typing.Optional[FeatureUsageDetailResponseData] = None + show_period_toggle: bool stripe_embed: typing.Optional[StripeEmbedInfo] = None subscription: typing.Optional[CompanySubscriptionResponseData] = None trial_payment_method_required: typing.Optional[bool] = None diff --git a/src/schematic/types/component_preview_response_data.py b/src/schematic/types/component_preview_response_data.py index f27c8c2..68cbb58 100644 --- a/src/schematic/types/component_preview_response_data.py +++ b/src/schematic/types/component_preview_response_data.py @@ -4,11 +4,14 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_credit_bundle_view import BillingCreditBundleView from .company_detail_response_data import CompanyDetailResponseData from .company_plan_detail_response_data import CompanyPlanDetailResponseData from .company_subscription_response_data import CompanySubscriptionResponseData +from .compatible_plans import CompatiblePlans from .component_capabilities import ComponentCapabilities from .component_response_data import ComponentResponseData +from .credit_company_grant_view import CreditCompanyGrantView from .feature_usage_detail_response_data import FeatureUsageDetailResponseData from .invoice_response_data import InvoiceResponseData from .plan_detail_response_data import PlanDetailResponseData @@ -24,12 +27,16 @@ class ComponentPreviewResponseData(UniversalBaseModel): active_add_ons: typing.List[CompanyPlanDetailResponseData] active_plans: typing.List[CompanyPlanDetailResponseData] active_usage_based_entitlements: typing.List[UsageBasedEntitlementResponseData] + add_on_compatibilities: typing.List[CompatiblePlans] capabilities: typing.Optional[ComponentCapabilities] = None company: typing.Optional[CompanyDetailResponseData] = None component: typing.Optional[ComponentResponseData] = None + credit_bundles: typing.List[BillingCreditBundleView] + credit_grants: typing.List[CreditCompanyGrantView] default_plan: typing.Optional[PlanDetailResponseData] = None feature_usage: typing.Optional[FeatureUsageDetailResponseData] = None invoices: typing.List[InvoiceResponseData] + show_period_toggle: bool stripe_embed: typing.Optional[StripeEmbedInfo] = None subscription: typing.Optional[CompanySubscriptionResponseData] = None trial_payment_method_required: typing.Optional[bool] = None diff --git a/src/schematic/types/create_entitlement_req_common.py b/src/schematic/types/create_entitlement_req_common.py index 362d3c2..6dddb10 100644 --- a/src/schematic/types/create_entitlement_req_common.py +++ b/src/schematic/types/create_entitlement_req_common.py @@ -10,10 +10,12 @@ class CreateEntitlementReqCommon(UniversalBaseModel): + credit_consumption_rate: typing.Optional[float] = None feature_id: str metric_period: typing.Optional[CreateEntitlementReqCommonMetricPeriod] = None metric_period_month_reset: typing.Optional[CreateEntitlementReqCommonMetricPeriodMonthReset] = None value_bool: typing.Optional[bool] = None + value_credit_id: typing.Optional[str] = None value_numeric: typing.Optional[int] = None value_trait_id: typing.Optional[str] = None value_type: CreateEntitlementReqCommonValueType diff --git a/src/schematic/types/create_entitlement_req_common_value_type.py b/src/schematic/types/create_entitlement_req_common_value_type.py index 5b1eff8..4829ab0 100644 --- a/src/schematic/types/create_entitlement_req_common_value_type.py +++ b/src/schematic/types/create_entitlement_req_common_value_type.py @@ -3,5 +3,5 @@ import typing CreateEntitlementReqCommonValueType = typing.Union[ - typing.Literal["boolean", "numeric", "trait", "unlimited"], typing.Any + typing.Literal["boolean", "credit", "numeric", "trait", "unlimited"], 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 179aea2..21e6f58 100644 --- a/src/schematic/types/create_or_update_condition_request_body.py +++ b/src/schematic/types/create_or_update_condition_request_body.py @@ -19,6 +19,16 @@ class CreateOrUpdateConditionRequestBody(UniversalBaseModel): """ condition_type: CreateOrUpdateConditionRequestBodyConditionType + credit_cost: typing.Optional[float] = pydantic.Field(default=None) + """ + Cost of credit to use to measure this condition + """ + + credit_id: typing.Optional[str] = pydantic.Field(default=None) + """ + ID of credit to use to measure this condition + """ + event_subtype: typing.Optional[str] = pydantic.Field(default=None) """ Name of track event type used to measure this condition diff --git a/src/schematic/types/create_price_tier_request_body.py b/src/schematic/types/create_price_tier_request_body.py new file mode 100644 index 0000000..0f163d6 --- /dev/null +++ b/src/schematic/types/create_price_tier_request_body.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CreatePriceTierRequestBody(UniversalBaseModel): + flat_amount: typing.Optional[int] = None + per_unit_price: typing.Optional[int] = None + per_unit_price_decimal: typing.Optional[str] = None + 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/credit_bundle_purchase_response_data.py b/src/schematic/types/credit_bundle_purchase_response_data.py new file mode 100644 index 0000000..67e5862 --- /dev/null +++ b/src/schematic/types/credit_bundle_purchase_response_data.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_credit_bundle_response_data import BillingCreditBundleResponseData + + +class CreditBundlePurchaseResponseData(UniversalBaseModel): + bundle: typing.Optional[BillingCreditBundleResponseData] = None + quantity: int + total: int + + 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/credit_company_grant_view.py b/src/schematic/types/credit_company_grant_view.py new file mode 100644 index 0000000..4899429 --- /dev/null +++ b/src/schematic/types/credit_company_grant_view.py @@ -0,0 +1,44 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_product_price_response_data import BillingProductPriceResponseData + + +class CreditCompanyGrantView(UniversalBaseModel): + billing_credit_bundle_id: typing.Optional[str] = None + billing_credit_id: str + company_id: str + company_name: str + created_at: dt.datetime + credit_description: str + credit_icon: typing.Optional[str] = None + credit_name: str + expires_at: typing.Optional[dt.datetime] = None + grant_reason: str + id: str + plan_id: typing.Optional[str] = None + plan_name: typing.Optional[str] = None + plural_name: typing.Optional[str] = None + price: typing.Optional[BillingProductPriceResponseData] = None + quantity: int + quantity_remaining: float + quantity_used: float + singular_name: typing.Optional[str] = None + source_label: str + updated_at: dt.datetime + valid_from: typing.Optional[dt.datetime] = None + zeroed_out_date: typing.Optional[dt.datetime] = None + zeroed_out_reason: 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: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/credit_trigger_config.py b/src/schematic/types/credit_trigger_config.py new file mode 100644 index 0000000..cb3d7de --- /dev/null +++ b/src/schematic/types/credit_trigger_config.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CreditTriggerConfig(UniversalBaseModel): + credit_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/event_summary_response_data.py b/src/schematic/types/event_summary_response_data.py index d077b2d..f6cbf60 100644 --- a/src/schematic/types/event_summary_response_data.py +++ b/src/schematic/types/event_summary_response_data.py @@ -8,12 +8,12 @@ class EventSummaryResponseData(UniversalBaseModel): - company_count: typing.Optional[int] = None + company_count: int environment_id: str event_count: int event_subtype: str last_seen_at: typing.Optional[dt.datetime] = None - user_count: typing.Optional[int] = None + user_count: int 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/feature_usage_data_response_data.py b/src/schematic/types/feature_usage_data_response_data.py new file mode 100644 index 0000000..dfde309 --- /dev/null +++ b/src/schematic/types/feature_usage_data_response_data.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class FeatureUsageDataResponseData(UniversalBaseModel): + entitlement_source: str + entitlement_value_type: str + feature_id: str + feature_name: str + feature_type: str + hard_limit: str + has_access: bool + soft_limit: str + usage: 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/feature_usage_response_data.py b/src/schematic/types/feature_usage_response_data.py index e3a6c74..d63866e 100644 --- a/src/schematic/types/feature_usage_response_data.py +++ b/src/schematic/types/feature_usage_response_data.py @@ -6,8 +6,10 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .billing_price_view import BillingPriceView +from .company_override_response_data import CompanyOverrideResponseData from .feature_detail_response_data import FeatureDetailResponseData from .feature_usage_response_data_allocation_type import FeatureUsageResponseDataAllocationType +from .plan_entitlement_response_data import PlanEntitlementResponseData from .plan_response_data import PlanResponseData @@ -27,6 +29,7 @@ class FeatureUsageResponseData(UniversalBaseModel): The type of allocation that is being used. """ + company_override: typing.Optional[CompanyOverrideResponseData] = None entitlement_expiration_date: typing.Optional[dt.datetime] = None entitlement_id: str entitlement_type: str @@ -48,6 +51,7 @@ class FeatureUsageResponseData(UniversalBaseModel): """ plan: typing.Optional[PlanResponseData] = None + plan_entitlement: typing.Optional[PlanEntitlementResponseData] = None price_behavior: typing.Optional[str] = None soft_limit: typing.Optional[int] = pydantic.Field(default=None) """ diff --git a/src/schematic/types/plan_credit_grant_view.py b/src/schematic/types/plan_credit_grant_view.py new file mode 100644 index 0000000..f36f24b --- /dev/null +++ b/src/schematic/types/plan_credit_grant_view.py @@ -0,0 +1,33 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class PlanCreditGrantView(UniversalBaseModel): + created_at: dt.datetime + credit_amount: int + credit_description: str + credit_icon: typing.Optional[str] = None + credit_id: str + credit_name: str + id: str + plan_id: str + plan_name: str + plural_name: typing.Optional[str] = None + reset_cadence: str + reset_start: str + singular_name: typing.Optional[str] = None + updated_at: dt.datetime + + 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_entitlement_response_data.py b/src/schematic/types/plan_entitlement_response_data.py index c887c5d..2fe0ca0 100644 --- a/src/schematic/types/plan_entitlement_response_data.py +++ b/src/schematic/types/plan_entitlement_response_data.py @@ -5,6 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_credit_response_data import BillingCreditResponseData from .billing_price_view import BillingPriceView from .billing_product_response_data import BillingProductResponseData from .entity_trait_definition_response_data import EntityTraitDefinitionResponseData @@ -13,6 +14,7 @@ class PlanEntitlementResponseData(UniversalBaseModel): + consumption_rate: typing.Optional[float] = None created_at: dt.datetime environment_id: str feature: typing.Optional[FeatureResponseData] = None @@ -31,6 +33,7 @@ class PlanEntitlementResponseData(UniversalBaseModel): updated_at: dt.datetime usage_based_product: typing.Optional[BillingProductResponseData] = None value_bool: typing.Optional[bool] = None + value_credit: typing.Optional[BillingCreditResponseData] = None value_numeric: typing.Optional[int] = None value_trait: typing.Optional[EntityTraitDefinitionResponseData] = None value_trait_id: typing.Optional[str] = None diff --git a/src/schematic/types/plan_group_bundle_order.py b/src/schematic/types/plan_group_bundle_order.py new file mode 100644 index 0000000..cc15825 --- /dev/null +++ b/src/schematic/types/plan_group_bundle_order.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ..core.serialization import FieldMetadata + + +class PlanGroupBundleOrder(UniversalBaseModel): + bundle_id: typing_extensions.Annotated[str, FieldMetadata(alias="bundleId")] + + 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 54a9619..276d1b6 100644 --- a/src/schematic/types/plan_group_detail_response_data.py +++ b/src/schematic/types/plan_group_detail_response_data.py @@ -5,6 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .custom_plan_view_config_response_data import CustomPlanViewConfigResponseData +from .plan_group_bundle_order import PlanGroupBundleOrder from .plan_group_plan_detail_response_data import PlanGroupPlanDetailResponseData from .plan_group_plan_entitlements_order import PlanGroupPlanEntitlementsOrder @@ -20,8 +21,11 @@ class PlanGroupDetailResponseData(UniversalBaseModel): default_plan: typing.Optional[PlanGroupPlanDetailResponseData] = None default_plan_id: typing.Optional[str] = None id: str + ordered_add_on_list: typing.List[PlanGroupPlanEntitlementsOrder] + ordered_bundle_list: typing.List[PlanGroupBundleOrder] ordered_plan_list: typing.List[PlanGroupPlanEntitlementsOrder] plans: typing.List[PlanGroupPlanDetailResponseData] + show_period_toggle: bool trial_days: typing.Optional[int] = None trial_payment_method_required: typing.Optional[bool] = None diff --git a/src/schematic/types/plan_group_plan_detail_response_data.py b/src/schematic/types/plan_group_plan_detail_response_data.py index e6b258c..bf869a8 100644 --- a/src/schematic/types/plan_group_plan_detail_response_data.py +++ b/src/schematic/types/plan_group_plan_detail_response_data.py @@ -17,6 +17,7 @@ class PlanGroupPlanDetailResponseData(UniversalBaseModel): billing_product: typing.Optional[BillingProductDetailResponseData] = None charge_type: str company_count: int + compatible_plan_ids: typing.List[str] controlled_by: str created_at: dt.datetime custom_plan_config: typing.Optional[CustomPlanViewConfigResponseData] = None diff --git a/src/schematic/types/plan_group_response_data.py b/src/schematic/types/plan_group_response_data.py index e711c20..58f2166 100644 --- a/src/schematic/types/plan_group_response_data.py +++ b/src/schematic/types/plan_group_response_data.py @@ -4,6 +4,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .compatible_plans_response_data import CompatiblePlansResponseData from .ordered_plans_in_group import OrderedPlansInGroup @@ -12,10 +13,13 @@ class PlanGroupResponseData(UniversalBaseModel): The updated resource """ + add_on_compatibilities: typing.List[CompatiblePlansResponseData] add_on_ids: typing.List[str] default_plan_id: typing.Optional[str] = None id: str + ordered_add_on_ids: typing.List[OrderedPlansInGroup] plan_ids: typing.List[OrderedPlansInGroup] + show_period_toggle: bool trial_days: typing.Optional[int] = None trial_payment_method_required: typing.Optional[bool] = None diff --git a/src/schematic/types/plan_trait_response_data.py b/src/schematic/types/plan_trait_response_data.py index e54801e..df4bf58 100644 --- a/src/schematic/types/plan_trait_response_data.py +++ b/src/schematic/types/plan_trait_response_data.py @@ -17,6 +17,7 @@ class PlanTraitResponseData(UniversalBaseModel): environment_id: str id: str plan_id: str + plan_type: str trait_id: str trait_value: str updated_at: dt.datetime diff --git a/src/schematic/types/preview_subscription_change_response_data.py b/src/schematic/types/preview_subscription_change_response_data.py index 9989313..f8801f4 100644 --- a/src/schematic/types/preview_subscription_change_response_data.py +++ b/src/schematic/types/preview_subscription_change_response_data.py @@ -18,6 +18,7 @@ class PreviewSubscriptionChangeResponseData(UniversalBaseModel): due_now: int finance: typing.Optional[PreviewSubscriptionFinanceResponseData] = None new_charges: int + payment_method_required: bool percent_off: float period_start: dt.datetime promo_code_applied: bool diff --git a/src/schematic/types/stripe_embed_info.py b/src/schematic/types/stripe_embed_info.py index 6630c70..ce0106d 100644 --- a/src/schematic/types/stripe_embed_info.py +++ b/src/schematic/types/stripe_embed_info.py @@ -7,7 +7,9 @@ class StripeEmbedInfo(UniversalBaseModel): - publishable_key: str + account_id: typing.Optional[str] = None + publishable_key: typing.Optional[str] = None + schematic_publishable_key: str setup_intent_client_secret: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/schematic/types/update_credit_bundle_request_body.py b/src/schematic/types/update_credit_bundle_request_body.py new file mode 100644 index 0000000..ddd2cc4 --- /dev/null +++ b/src/schematic/types/update_credit_bundle_request_body.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class UpdateCreditBundleRequestBody(UniversalBaseModel): + bundle_id: str + quantity: int + + 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/update_entitlement_req_common.py b/src/schematic/types/update_entitlement_req_common.py index 93f2268..a28acbc 100644 --- a/src/schematic/types/update_entitlement_req_common.py +++ b/src/schematic/types/update_entitlement_req_common.py @@ -10,9 +10,11 @@ class UpdateEntitlementReqCommon(UniversalBaseModel): + credit_consumption_rate: typing.Optional[float] = None metric_period: typing.Optional[UpdateEntitlementReqCommonMetricPeriod] = None metric_period_month_reset: typing.Optional[UpdateEntitlementReqCommonMetricPeriodMonthReset] = None value_bool: typing.Optional[bool] = None + value_credit_id: typing.Optional[str] = None value_numeric: typing.Optional[int] = None value_trait_id: typing.Optional[str] = None value_type: UpdateEntitlementReqCommonValueType diff --git a/src/schematic/types/update_entitlement_req_common_value_type.py b/src/schematic/types/update_entitlement_req_common_value_type.py index 257aef6..e058e40 100644 --- a/src/schematic/types/update_entitlement_req_common_value_type.py +++ b/src/schematic/types/update_entitlement_req_common_value_type.py @@ -3,5 +3,5 @@ import typing UpdateEntitlementReqCommonValueType = typing.Union[ - typing.Literal["boolean", "numeric", "trait", "unlimited"], typing.Any + typing.Literal["boolean", "credit", "numeric", "trait", "unlimited"], typing.Any ] diff --git a/src/schematic/types/usage_based_entitlement_request_body.py b/src/schematic/types/usage_based_entitlement_request_body.py index d90e0f3..46805e7 100644 --- a/src/schematic/types/usage_based_entitlement_request_body.py +++ b/src/schematic/types/usage_based_entitlement_request_body.py @@ -4,17 +4,28 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .create_price_tier_request_body import CreatePriceTierRequestBody +from .usage_based_entitlement_request_body_price_behavior import UsageBasedEntitlementRequestBodyPriceBehavior class UsageBasedEntitlementRequestBody(UniversalBaseModel): + billing_product_id: typing.Optional[str] = None currency: typing.Optional[str] = None monthly_metered_price_id: typing.Optional[str] = None + monthly_price_tiers: typing.Optional[typing.List[CreatePriceTierRequestBody]] = None monthly_unit_price: typing.Optional[int] = None monthly_unit_price_decimal: typing.Optional[str] = None overage_billing_product_id: typing.Optional[str] = None - price_behavior: typing.Optional[str] = None + price_behavior: typing.Optional[UsageBasedEntitlementRequestBodyPriceBehavior] = None + price_tiers: typing.Optional[typing.List[CreatePriceTierRequestBody]] = pydantic.Field(default=None) + """ + Use MonthlyPriceTiers or YearlyPriceTiers instead + """ + soft_limit: typing.Optional[int] = None + tier_mode: typing.Optional[str] = None yearly_metered_price_id: typing.Optional[str] = None + yearly_price_tiers: typing.Optional[typing.List[CreatePriceTierRequestBody]] = None yearly_unit_price: typing.Optional[int] = None yearly_unit_price_decimal: typing.Optional[str] = None diff --git a/src/schematic/types/usage_based_entitlement_request_body_price_behavior.py b/src/schematic/types/usage_based_entitlement_request_body_price_behavior.py new file mode 100644 index 0000000..82c69cd --- /dev/null +++ b/src/schematic/types/usage_based_entitlement_request_body_price_behavior.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +UsageBasedEntitlementRequestBodyPriceBehavior = typing.Union[ + typing.Literal["pay_as_you_go", "pay_in_advance", "overage", "credit_burndown", "tier"], typing.Any +] diff --git a/src/schematic/types/usage_based_entitlement_response_data.py b/src/schematic/types/usage_based_entitlement_response_data.py index be8d6c0..a53e2e7 100644 --- a/src/schematic/types/usage_based_entitlement_response_data.py +++ b/src/schematic/types/usage_based_entitlement_response_data.py @@ -8,6 +8,7 @@ class UsageBasedEntitlementResponseData(UniversalBaseModel): + consumption_rate: typing.Optional[float] = None feature_id: str metered_price: typing.Optional[BillingPriceView] = None metric_period: typing.Optional[str] = None diff --git a/src/schematic/types/webhook_response_data.py b/src/schematic/types/webhook_response_data.py index df47917..39c09a7 100644 --- a/src/schematic/types/webhook_response_data.py +++ b/src/schematic/types/webhook_response_data.py @@ -5,11 +5,13 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .credit_trigger_config import CreditTriggerConfig from .entitlement_trigger_config import EntitlementTriggerConfig class WebhookResponseData(UniversalBaseModel): created_at: dt.datetime + credit_trigger_configs: typing.Optional[typing.List[CreditTriggerConfig]] = None entitlement_trigger_configs: typing.Optional[typing.List[EntitlementTriggerConfig]] = None id: str name: str diff --git a/src/schematic/webhooks/client.py b/src/schematic/webhooks/client.py index 2a78f09..e2326cf 100644 --- a/src/schematic/webhooks/client.py +++ b/src/schematic/webhooks/client.py @@ -4,6 +4,7 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions +from ..types.credit_trigger_config import CreditTriggerConfig from ..types.entitlement_trigger_config import EntitlementTriggerConfig from .raw_client import AsyncRawWebhooksClient, RawWebhooksClient from .types.count_webhook_events_response import CountWebhookEventsResponse @@ -208,6 +209,7 @@ def create_webhook( name: str, request_types: typing.Sequence[CreateWebhookRequestBodyRequestTypesItem], url: str, + credit_trigger_configs: typing.Optional[typing.Sequence[CreditTriggerConfig]] = OMIT, entitlement_trigger_configs: typing.Optional[typing.Sequence[EntitlementTriggerConfig]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> CreateWebhookResponse: @@ -220,6 +222,8 @@ def create_webhook( url : str + credit_trigger_configs : typing.Optional[typing.Sequence[CreditTriggerConfig]] + entitlement_trigger_configs : typing.Optional[typing.Sequence[EntitlementTriggerConfig]] request_options : typing.Optional[RequestOptions] @@ -247,6 +251,7 @@ def create_webhook( name=name, request_types=request_types, url=url, + credit_trigger_configs=credit_trigger_configs, entitlement_trigger_configs=entitlement_trigger_configs, request_options=request_options, ) @@ -287,6 +292,7 @@ def update_webhook( self, webhook_id: str, *, + credit_trigger_configs: typing.Optional[typing.Sequence[CreditTriggerConfig]] = OMIT, entitlement_trigger_configs: typing.Optional[typing.Sequence[EntitlementTriggerConfig]] = OMIT, name: typing.Optional[str] = OMIT, request_types: typing.Optional[typing.Sequence[UpdateWebhookRequestBodyRequestTypesItem]] = OMIT, @@ -300,6 +306,8 @@ def update_webhook( webhook_id : str webhook_id + credit_trigger_configs : typing.Optional[typing.Sequence[CreditTriggerConfig]] + entitlement_trigger_configs : typing.Optional[typing.Sequence[EntitlementTriggerConfig]] name : typing.Optional[str] @@ -331,6 +339,7 @@ def update_webhook( """ _response = self._raw_client.update_webhook( webhook_id, + credit_trigger_configs=credit_trigger_configs, entitlement_trigger_configs=entitlement_trigger_configs, name=name, request_types=request_types, @@ -630,6 +639,7 @@ async def create_webhook( name: str, request_types: typing.Sequence[CreateWebhookRequestBodyRequestTypesItem], url: str, + credit_trigger_configs: typing.Optional[typing.Sequence[CreditTriggerConfig]] = OMIT, entitlement_trigger_configs: typing.Optional[typing.Sequence[EntitlementTriggerConfig]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> CreateWebhookResponse: @@ -642,6 +652,8 @@ async def create_webhook( url : str + credit_trigger_configs : typing.Optional[typing.Sequence[CreditTriggerConfig]] + entitlement_trigger_configs : typing.Optional[typing.Sequence[EntitlementTriggerConfig]] request_options : typing.Optional[RequestOptions] @@ -677,6 +689,7 @@ async def main() -> None: name=name, request_types=request_types, url=url, + credit_trigger_configs=credit_trigger_configs, entitlement_trigger_configs=entitlement_trigger_configs, request_options=request_options, ) @@ -725,6 +738,7 @@ async def update_webhook( self, webhook_id: str, *, + credit_trigger_configs: typing.Optional[typing.Sequence[CreditTriggerConfig]] = OMIT, entitlement_trigger_configs: typing.Optional[typing.Sequence[EntitlementTriggerConfig]] = OMIT, name: typing.Optional[str] = OMIT, request_types: typing.Optional[typing.Sequence[UpdateWebhookRequestBodyRequestTypesItem]] = OMIT, @@ -738,6 +752,8 @@ async def update_webhook( webhook_id : str webhook_id + credit_trigger_configs : typing.Optional[typing.Sequence[CreditTriggerConfig]] + entitlement_trigger_configs : typing.Optional[typing.Sequence[EntitlementTriggerConfig]] name : typing.Optional[str] @@ -777,6 +793,7 @@ async def main() -> None: """ _response = await self._raw_client.update_webhook( webhook_id, + credit_trigger_configs=credit_trigger_configs, entitlement_trigger_configs=entitlement_trigger_configs, name=name, request_types=request_types, diff --git a/src/schematic/webhooks/raw_client.py b/src/schematic/webhooks/raw_client.py index fed243d..7da2df3 100644 --- a/src/schematic/webhooks/raw_client.py +++ b/src/schematic/webhooks/raw_client.py @@ -16,6 +16,7 @@ from ..errors.not_found_error import NotFoundError from ..errors.unauthorized_error import UnauthorizedError from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.credit_trigger_config import CreditTriggerConfig from ..types.entitlement_trigger_config import EntitlementTriggerConfig from .types.count_webhook_events_response import CountWebhookEventsResponse from .types.count_webhooks_response import CountWebhooksResponse @@ -478,6 +479,7 @@ def create_webhook( name: str, request_types: typing.Sequence[CreateWebhookRequestBodyRequestTypesItem], url: str, + credit_trigger_configs: typing.Optional[typing.Sequence[CreditTriggerConfig]] = OMIT, entitlement_trigger_configs: typing.Optional[typing.Sequence[EntitlementTriggerConfig]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[CreateWebhookResponse]: @@ -490,6 +492,8 @@ def create_webhook( url : str + credit_trigger_configs : typing.Optional[typing.Sequence[CreditTriggerConfig]] + entitlement_trigger_configs : typing.Optional[typing.Sequence[EntitlementTriggerConfig]] request_options : typing.Optional[RequestOptions] @@ -504,6 +508,9 @@ def create_webhook( "webhooks", method="POST", json={ + "credit_trigger_configs": convert_and_respect_annotation_metadata( + object_=credit_trigger_configs, annotation=typing.Sequence[CreditTriggerConfig], direction="write" + ), "entitlement_trigger_configs": convert_and_respect_annotation_metadata( object_=entitlement_trigger_configs, annotation=typing.Sequence[EntitlementTriggerConfig], @@ -682,6 +689,7 @@ def update_webhook( self, webhook_id: str, *, + credit_trigger_configs: typing.Optional[typing.Sequence[CreditTriggerConfig]] = OMIT, entitlement_trigger_configs: typing.Optional[typing.Sequence[EntitlementTriggerConfig]] = OMIT, name: typing.Optional[str] = OMIT, request_types: typing.Optional[typing.Sequence[UpdateWebhookRequestBodyRequestTypesItem]] = OMIT, @@ -695,6 +703,8 @@ def update_webhook( webhook_id : str webhook_id + credit_trigger_configs : typing.Optional[typing.Sequence[CreditTriggerConfig]] + entitlement_trigger_configs : typing.Optional[typing.Sequence[EntitlementTriggerConfig]] name : typing.Optional[str] @@ -717,6 +727,9 @@ def update_webhook( f"webhooks/{jsonable_encoder(webhook_id)}", method="PUT", json={ + "credit_trigger_configs": convert_and_respect_annotation_metadata( + object_=credit_trigger_configs, annotation=typing.Sequence[CreditTriggerConfig], direction="write" + ), "entitlement_trigger_configs": convert_and_respect_annotation_metadata( object_=entitlement_trigger_configs, annotation=typing.Sequence[EntitlementTriggerConfig], @@ -1459,6 +1472,7 @@ async def create_webhook( name: str, request_types: typing.Sequence[CreateWebhookRequestBodyRequestTypesItem], url: str, + credit_trigger_configs: typing.Optional[typing.Sequence[CreditTriggerConfig]] = OMIT, entitlement_trigger_configs: typing.Optional[typing.Sequence[EntitlementTriggerConfig]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[CreateWebhookResponse]: @@ -1471,6 +1485,8 @@ async def create_webhook( url : str + credit_trigger_configs : typing.Optional[typing.Sequence[CreditTriggerConfig]] + entitlement_trigger_configs : typing.Optional[typing.Sequence[EntitlementTriggerConfig]] request_options : typing.Optional[RequestOptions] @@ -1485,6 +1501,9 @@ async def create_webhook( "webhooks", method="POST", json={ + "credit_trigger_configs": convert_and_respect_annotation_metadata( + object_=credit_trigger_configs, annotation=typing.Sequence[CreditTriggerConfig], direction="write" + ), "entitlement_trigger_configs": convert_and_respect_annotation_metadata( object_=entitlement_trigger_configs, annotation=typing.Sequence[EntitlementTriggerConfig], @@ -1663,6 +1682,7 @@ async def update_webhook( self, webhook_id: str, *, + credit_trigger_configs: typing.Optional[typing.Sequence[CreditTriggerConfig]] = OMIT, entitlement_trigger_configs: typing.Optional[typing.Sequence[EntitlementTriggerConfig]] = OMIT, name: typing.Optional[str] = OMIT, request_types: typing.Optional[typing.Sequence[UpdateWebhookRequestBodyRequestTypesItem]] = OMIT, @@ -1676,6 +1696,8 @@ async def update_webhook( webhook_id : str webhook_id + credit_trigger_configs : typing.Optional[typing.Sequence[CreditTriggerConfig]] + entitlement_trigger_configs : typing.Optional[typing.Sequence[EntitlementTriggerConfig]] name : typing.Optional[str] @@ -1698,6 +1720,9 @@ async def update_webhook( f"webhooks/{jsonable_encoder(webhook_id)}", method="PUT", json={ + "credit_trigger_configs": convert_and_respect_annotation_metadata( + object_=credit_trigger_configs, annotation=typing.Sequence[CreditTriggerConfig], direction="write" + ), "entitlement_trigger_configs": convert_and_respect_annotation_metadata( object_=entitlement_trigger_configs, annotation=typing.Sequence[EntitlementTriggerConfig], diff --git a/src/schematic/webhooks/types/create_webhook_request_body_request_types_item.py b/src/schematic/webhooks/types/create_webhook_request_body_request_types_item.py index 24ec6ca..cd75015 100644 --- a/src/schematic/webhooks/types/create_webhook_request_body_request_types_item.py +++ b/src/schematic/webhooks/types/create_webhook_request_body_request_types_item.py @@ -32,6 +32,8 @@ "entitlement.limit.reached", "entitlement.soft_limit.warning", "entitlement.soft_limit.reached", + "credit.limit.warning", + "credit.limit.reached", ], typing.Any, ] diff --git a/src/schematic/webhooks/types/update_webhook_request_body_request_types_item.py b/src/schematic/webhooks/types/update_webhook_request_body_request_types_item.py index 442b853..341db10 100644 --- a/src/schematic/webhooks/types/update_webhook_request_body_request_types_item.py +++ b/src/schematic/webhooks/types/update_webhook_request_body_request_types_item.py @@ -32,6 +32,8 @@ "entitlement.limit.reached", "entitlement.soft_limit.warning", "entitlement.soft_limit.reached", + "credit.limit.warning", + "credit.limit.reached", ], typing.Any, ]