From bea15af0e9634b510226cbcf8d6672bf9a2e1f11 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 15:23:42 +0000 Subject: [PATCH] SDK regeneration --- poetry.lock | 8 +- pyproject.toml | 2 +- src/schematic/__init__.py | 180 +- src/schematic/base_client.py | 3 + src/schematic/billing/__init__.py | 8 +- src/schematic/billing/client.py | 41 +- src/schematic/billing/raw_client.py | 35 +- src/schematic/billing/types/__init__.py | 8 +- ...te_billing_price_request_body_tier_mode.py | 5 - ...e_billing_price_request_body_tiers_mode.py | 5 + .../types/search_billing_prices_params.py | 2 + ...earch_billing_prices_request_tiers_mode.py | 5 + ...lling_prices_response_params_tiers_mode.py | 5 + src/schematic/checkout/client.py | 65 + src/schematic/checkout/raw_client.py | 41 + src/schematic/companies/__init__.py | 32 + src/schematic/companies/client.py | 1282 ++++- src/schematic/companies/raw_client.py | 3392 ++++++++--- src/schematic/companies/types/__init__.py | 40 + ...nt_companies_for_advanced_filter_params.py | 96 + ...ced_filter_request_sort_order_direction.py | 5 + ..._companies_for_advanced_filter_response.py | 25 + ...er_response_params_sort_order_direction.py | 7 + .../types/count_plan_traits_params.py | 1 + .../types/count_plan_traits_response.py | 0 .../types/create_plan_trait_response.py | 0 .../types/delete_plan_trait_response.py | 0 .../types/get_plan_trait_response.py | 0 ...st_companies_for_advanced_filter_params.py | 96 + ...ced_filter_request_sort_order_direction.py | 5 + ..._companies_for_advanced_filter_response.py | 29 + ...er_response_params_sort_order_direction.py | 5 + .../types/list_plan_traits_params.py | 1 + .../types/list_plan_traits_response.py | 0 .../types/update_plan_trait_response.py | 0 src/schematic/core/client_wrapper.py | 4 +- src/schematic/credits/__init__.py | 107 + src/schematic/credits/client.py | 2377 ++++++++ src/schematic/credits/raw_client.py | 4987 +++++++++++++++++ src/schematic/credits/types/__init__.py | 111 + .../count_billing_credits_grants_params.py | 33 + .../count_billing_credits_grants_response.py | 25 + .../types/count_billing_credits_params.py | 33 + .../types/count_billing_credits_response.py | 25 + ...count_billing_plan_credit_grants_params.py | 36 + ...unt_billing_plan_credit_grants_response.py | 25 + .../types/count_credit_bundles_params.py | 37 + .../count_credit_bundles_request_status.py | 5 + .../types/count_credit_bundles_response.py | 25 + ...t_credit_bundles_response_params_status.py | 5 + ...lling_credit_request_body_burn_strategy.py | 13 + ...it_request_body_default_rollover_policy.py | 7 + .../types/create_billing_credit_response.py | 24 + ...credit_grant_request_body_reset_cadence.py | 7 + ...n_credit_grant_request_body_reset_start.py | 7 + ...eate_billing_plan_credit_grant_response.py | 24 + ..._credit_bundle_request_body_expiry_type.py | 5 + ...reate_credit_bundle_request_body_status.py | 5 + .../types/create_credit_bundle_response.py | 24 + ...lete_billing_plan_credit_grant_response.py | 24 + .../types/delete_credit_bundle_response.py | 24 + .../types/get_credit_bundle_response.py | 24 + .../get_single_billing_credit_response.py | 24 + ...ant_billing_credits_to_company_response.py | 24 + .../types/list_billing_credits_params.py | 33 + .../types/list_billing_credits_response.py | 29 + .../list_billing_plan_credit_grants_params.py | 36 + ...ist_billing_plan_credit_grants_response.py | 29 + .../types/list_company_grants_params.py | 37 + .../types/list_company_grants_request_dir.py | 5 + .../list_company_grants_request_order.py | 7 + .../types/list_company_grants_response.py | 29 + ...list_company_grants_response_params_dir.py | 5 + ...st_company_grants_response_params_order.py | 7 + .../types/list_credit_bundles_params.py | 37 + .../list_credit_bundles_request_status.py | 5 + .../types/list_credit_bundles_response.py | 29 + ...t_credit_bundles_response_params_status.py | 5 + .../types/list_grants_for_credit_params.py | 33 + .../types/list_grants_for_credit_response.py | 29 + .../soft_delete_billing_credit_response.py | 24 + ...lling_credit_request_body_burn_strategy.py | 13 + ...it_request_body_default_rollover_policy.py | 7 + .../types/update_billing_credit_response.py | 24 + ...bundle_details_request_body_expiry_type.py | 7 + ...edit_bundle_details_request_body_status.py | 5 + .../update_credit_bundle_details_response.py | 24 + .../zero_out_grant_request_body_reason.py | 5 + .../credits/types/zero_out_grant_response.py | 24 + src/schematic/entitlements/__init__.py | 4 + src/schematic/entitlements/client.py | 167 +- src/schematic/entitlements/raw_client.py | 208 +- src/schematic/entitlements/types/__init__.py | 4 + ...ompany_override_request_body_value_type.py | 2 +- ...entitlement_request_body_price_behavior.py | 7 + ...lan_entitlement_request_body_value_type.py | 2 +- ...ompany_override_request_body_value_type.py | 2 +- ...entitlement_request_body_price_behavior.py | 7 + ...lan_entitlement_request_body_value_type.py | 2 +- src/schematic/features/client.py | 40 + src/schematic/features/raw_client.py | 40 + .../features/types/count_features_params.py | 10 + .../features/types/list_features_params.py | 10 + src/schematic/plangroups/client.py | 122 +- src/schematic/plangroups/raw_client.py | 94 + src/schematic/plans/__init__.py | 16 - src/schematic/plans/client.py | 530 -- src/schematic/plans/raw_client.py | 1738 +----- src/schematic/plans/types/__init__.py | 16 - src/schematic/types/__init__.py | 34 + .../billing_credit_bundle_response_data.py | 39 + .../types/billing_credit_bundle_view.py | 39 + .../billing_credit_grant_response_data.py | 39 + .../types/billing_credit_response_data.py | 35 + ...billing_plan_credit_grant_response_data.py | 28 + src/schematic/types/billing_price_view.py | 1 + .../billing_product_price_response_data.py | 1 + ...ange_subscription_internal_request_body.py | 3 + .../types/change_subscription_request_body.py | 3 + .../types/checkout_data_response_data.py | 4 + .../types/company_detail_response_data.py | 1 + .../types/company_override_response_data.py | 5 +- .../company_plan_detail_response_data.py | 3 + ...y_view_with_feature_usage_response_data.py | 52 + src/schematic/types/compatible_plans.py | 20 + .../types/compatible_plans_response_data.py | 20 + .../types/component_hydrate_response_data.py | 7 + .../types/component_preview_response_data.py | 7 + .../types/create_entitlement_req_common.py | 2 + ...reate_entitlement_req_common_value_type.py | 2 +- ...create_or_update_condition_request_body.py | 10 + .../types/create_price_tier_request_body.py | 22 + .../credit_bundle_purchase_response_data.py | 22 + .../types/credit_company_grant_view.py | 44 + src/schematic/types/credit_trigger_config.py | 19 + .../types/event_summary_response_data.py | 4 +- .../types/feature_usage_data_response_data.py | 27 + .../types/feature_usage_response_data.py | 4 + src/schematic/types/plan_credit_grant_view.py | 33 + .../types/plan_entitlement_response_data.py | 3 + .../types/plan_group_bundle_order.py | 21 + .../types/plan_group_detail_response_data.py | 4 + .../plan_group_plan_detail_response_data.py | 1 + .../types/plan_group_response_data.py | 4 + .../types/plan_trait_response_data.py | 1 + ...eview_subscription_change_response_data.py | 1 + src/schematic/types/stripe_embed_info.py | 4 +- .../update_credit_bundle_request_body.py | 20 + .../types/update_entitlement_req_common.py | 2 + ...pdate_entitlement_req_common_value_type.py | 2 +- .../usage_based_entitlement_request_body.py | 13 +- ...entitlement_request_body_price_behavior.py | 7 + .../usage_based_entitlement_response_data.py | 1 + src/schematic/types/webhook_response_data.py | 2 + src/schematic/webhooks/client.py | 17 + src/schematic/webhooks/raw_client.py | 25 + ...webhook_request_body_request_types_item.py | 2 + ...webhook_request_body_request_types_item.py | 2 + 158 files changed, 14656 insertions(+), 3015 deletions(-) delete mode 100644 src/schematic/billing/types/create_billing_price_request_body_tier_mode.py create mode 100644 src/schematic/billing/types/create_billing_price_request_body_tiers_mode.py create mode 100644 src/schematic/billing/types/search_billing_prices_request_tiers_mode.py create mode 100644 src/schematic/billing/types/search_billing_prices_response_params_tiers_mode.py create mode 100644 src/schematic/companies/types/count_companies_for_advanced_filter_params.py create mode 100644 src/schematic/companies/types/count_companies_for_advanced_filter_request_sort_order_direction.py create mode 100644 src/schematic/companies/types/count_companies_for_advanced_filter_response.py create mode 100644 src/schematic/companies/types/count_companies_for_advanced_filter_response_params_sort_order_direction.py rename src/schematic/{plans => companies}/types/count_plan_traits_params.py (94%) rename src/schematic/{plans => companies}/types/count_plan_traits_response.py (100%) rename src/schematic/{plans => companies}/types/create_plan_trait_response.py (100%) rename src/schematic/{plans => companies}/types/delete_plan_trait_response.py (100%) rename src/schematic/{plans => companies}/types/get_plan_trait_response.py (100%) create mode 100644 src/schematic/companies/types/list_companies_for_advanced_filter_params.py create mode 100644 src/schematic/companies/types/list_companies_for_advanced_filter_request_sort_order_direction.py create mode 100644 src/schematic/companies/types/list_companies_for_advanced_filter_response.py create mode 100644 src/schematic/companies/types/list_companies_for_advanced_filter_response_params_sort_order_direction.py rename src/schematic/{plans => companies}/types/list_plan_traits_params.py (94%) rename src/schematic/{plans => companies}/types/list_plan_traits_response.py (100%) rename src/schematic/{plans => companies}/types/update_plan_trait_response.py (100%) create mode 100644 src/schematic/credits/__init__.py create mode 100644 src/schematic/credits/client.py create mode 100644 src/schematic/credits/raw_client.py create mode 100644 src/schematic/credits/types/__init__.py create mode 100644 src/schematic/credits/types/count_billing_credits_grants_params.py create mode 100644 src/schematic/credits/types/count_billing_credits_grants_response.py create mode 100644 src/schematic/credits/types/count_billing_credits_params.py create mode 100644 src/schematic/credits/types/count_billing_credits_response.py create mode 100644 src/schematic/credits/types/count_billing_plan_credit_grants_params.py create mode 100644 src/schematic/credits/types/count_billing_plan_credit_grants_response.py create mode 100644 src/schematic/credits/types/count_credit_bundles_params.py create mode 100644 src/schematic/credits/types/count_credit_bundles_request_status.py create mode 100644 src/schematic/credits/types/count_credit_bundles_response.py create mode 100644 src/schematic/credits/types/count_credit_bundles_response_params_status.py create mode 100644 src/schematic/credits/types/create_billing_credit_request_body_burn_strategy.py create mode 100644 src/schematic/credits/types/create_billing_credit_request_body_default_rollover_policy.py create mode 100644 src/schematic/credits/types/create_billing_credit_response.py create mode 100644 src/schematic/credits/types/create_billing_plan_credit_grant_request_body_reset_cadence.py create mode 100644 src/schematic/credits/types/create_billing_plan_credit_grant_request_body_reset_start.py create mode 100644 src/schematic/credits/types/create_billing_plan_credit_grant_response.py create mode 100644 src/schematic/credits/types/create_credit_bundle_request_body_expiry_type.py create mode 100644 src/schematic/credits/types/create_credit_bundle_request_body_status.py create mode 100644 src/schematic/credits/types/create_credit_bundle_response.py create mode 100644 src/schematic/credits/types/delete_billing_plan_credit_grant_response.py create mode 100644 src/schematic/credits/types/delete_credit_bundle_response.py create mode 100644 src/schematic/credits/types/get_credit_bundle_response.py create mode 100644 src/schematic/credits/types/get_single_billing_credit_response.py create mode 100644 src/schematic/credits/types/grant_billing_credits_to_company_response.py create mode 100644 src/schematic/credits/types/list_billing_credits_params.py create mode 100644 src/schematic/credits/types/list_billing_credits_response.py create mode 100644 src/schematic/credits/types/list_billing_plan_credit_grants_params.py create mode 100644 src/schematic/credits/types/list_billing_plan_credit_grants_response.py create mode 100644 src/schematic/credits/types/list_company_grants_params.py create mode 100644 src/schematic/credits/types/list_company_grants_request_dir.py create mode 100644 src/schematic/credits/types/list_company_grants_request_order.py create mode 100644 src/schematic/credits/types/list_company_grants_response.py create mode 100644 src/schematic/credits/types/list_company_grants_response_params_dir.py create mode 100644 src/schematic/credits/types/list_company_grants_response_params_order.py create mode 100644 src/schematic/credits/types/list_credit_bundles_params.py create mode 100644 src/schematic/credits/types/list_credit_bundles_request_status.py create mode 100644 src/schematic/credits/types/list_credit_bundles_response.py create mode 100644 src/schematic/credits/types/list_credit_bundles_response_params_status.py create mode 100644 src/schematic/credits/types/list_grants_for_credit_params.py create mode 100644 src/schematic/credits/types/list_grants_for_credit_response.py create mode 100644 src/schematic/credits/types/soft_delete_billing_credit_response.py create mode 100644 src/schematic/credits/types/update_billing_credit_request_body_burn_strategy.py create mode 100644 src/schematic/credits/types/update_billing_credit_request_body_default_rollover_policy.py create mode 100644 src/schematic/credits/types/update_billing_credit_response.py create mode 100644 src/schematic/credits/types/update_credit_bundle_details_request_body_expiry_type.py create mode 100644 src/schematic/credits/types/update_credit_bundle_details_request_body_status.py create mode 100644 src/schematic/credits/types/update_credit_bundle_details_response.py create mode 100644 src/schematic/credits/types/zero_out_grant_request_body_reason.py create mode 100644 src/schematic/credits/types/zero_out_grant_response.py create mode 100644 src/schematic/entitlements/types/create_plan_entitlement_request_body_price_behavior.py create mode 100644 src/schematic/entitlements/types/update_plan_entitlement_request_body_price_behavior.py create mode 100644 src/schematic/types/billing_credit_bundle_response_data.py create mode 100644 src/schematic/types/billing_credit_bundle_view.py create mode 100644 src/schematic/types/billing_credit_grant_response_data.py create mode 100644 src/schematic/types/billing_credit_response_data.py create mode 100644 src/schematic/types/billing_plan_credit_grant_response_data.py create mode 100644 src/schematic/types/company_view_with_feature_usage_response_data.py create mode 100644 src/schematic/types/compatible_plans.py create mode 100644 src/schematic/types/compatible_plans_response_data.py create mode 100644 src/schematic/types/create_price_tier_request_body.py create mode 100644 src/schematic/types/credit_bundle_purchase_response_data.py create mode 100644 src/schematic/types/credit_company_grant_view.py create mode 100644 src/schematic/types/credit_trigger_config.py create mode 100644 src/schematic/types/feature_usage_data_response_data.py create mode 100644 src/schematic/types/plan_credit_grant_view.py create mode 100644 src/schematic/types/plan_group_bundle_order.py create mode 100644 src/schematic/types/update_credit_bundle_request_body.py create mode 100644 src/schematic/types/usage_based_entitlement_request_body_price_behavior.py 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, ]