From 3a9f3caddcc488390763d89f69348ebcccacf0ed Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 28 Oct 2025 15:12:38 +0000 Subject: [PATCH] SDK regeneration --- pyproject.toml | 2 +- src/schematic/__init__.py | 42 +- src/schematic/base_client.py | 364 +--- src/schematic/companies/__init__.py | 6 + src/schematic/companies/client.py | 212 ++ src/schematic/companies/raw_client.py | 426 ++++ src/schematic/companies/types/__init__.py | 6 + .../types/get_plan_change_response.py} | 6 +- .../types/list_plan_changes_params.py} | 18 +- .../types/list_plan_changes_response.py} | 9 +- src/schematic/core/client_wrapper.py | 4 +- src/schematic/credits/client.py | 162 +- src/schematic/credits/raw_client.py | 128 +- src/schematic/features/__init__.py | 8 - src/schematic/features/client.py | 638 ------ src/schematic/features/raw_client.py | 1846 ++++------------- src/schematic/features/types/__init__.py | 8 - .../types/count_audience_users_response.py | 24 - .../types/list_audience_companies_response.py | 24 - src/schematic/plangroups/client.py | 16 - src/schematic/plangroups/raw_client.py | 16 - src/schematic/plans/__init__.py | 6 - src/schematic/plans/client.py | 281 --- src/schematic/plans/raw_client.py | 1258 +++-------- src/schematic/plans/types/__init__.py | 6 - .../plans/types/delete_audience_response.py | 24 - .../plans/types/get_audience_response.py | 24 - .../plans/types/update_audience_response.py | 24 - src/schematic/raw_base_client.py | 325 +-- src/schematic/types/__init__.py | 22 +- ..._or_update_condition_group_request_body.py | 1 - ...e_or_update_rule_request_body_rule_type.py | 3 +- .../plan_audience_detail_response_data.py | 33 - .../types/plan_change_response_data.py | 62 + .../types/plan_change_response_data_action.py | 17 + .../plan_change_response_data_actor_type.py | 7 + ...n_change_response_data_base_plan_action.py | 7 + ...esponse_data_subscription_change_action.py | 7 + ...nation_filter.py => plan_snapshot_view.py} | 16 +- .../rule_condition_detail_response_data.py | 1 - ...le_condition_group_detail_response_data.py | 1 - .../rule_condition_group_response_data.py | 1 - .../types/rule_condition_response_data.py | 1 - .../types/rule_detail_response_data.py | 1 - src/schematic/types/rule_response_data.py | 1 - ...e_data.py => subscription_trait_update.py} | 20 +- ...webhook_request_body_request_types_item.py | 1 + ...webhook_request_body_request_types_item.py | 1 + 48 files changed, 1744 insertions(+), 4372 deletions(-) rename src/schematic/{features/types/count_audience_companies_response.py => companies/types/get_plan_change_response.py} (79%) rename src/schematic/{types/audience_request_body.py => companies/types/list_plan_changes_params.py} (55%) rename src/schematic/{features/types/list_audience_users_response.py => companies/types/list_plan_changes_response.py} (65%) delete mode 100644 src/schematic/features/types/count_audience_users_response.py delete mode 100644 src/schematic/features/types/list_audience_companies_response.py delete mode 100644 src/schematic/plans/types/delete_audience_response.py delete mode 100644 src/schematic/plans/types/get_audience_response.py delete mode 100644 src/schematic/plans/types/update_audience_response.py delete mode 100644 src/schematic/types/plan_audience_detail_response_data.py create mode 100644 src/schematic/types/plan_change_response_data.py create mode 100644 src/schematic/types/plan_change_response_data_action.py create mode 100644 src/schematic/types/plan_change_response_data_actor_type.py create mode 100644 src/schematic/types/plan_change_response_data_base_plan_action.py create mode 100644 src/schematic/types/plan_change_response_data_subscription_change_action.py rename src/schematic/types/{pagination_filter.py => plan_snapshot_view.py} (64%) rename src/schematic/types/{plan_audience_response_data.py => subscription_trait_update.py} (59%) diff --git a/pyproject.toml b/pyproject.toml index c0d9a81..dc811d0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "schematichq" [tool.poetry] name = "schematichq" -version = "1.1.1" +version = "1.1.2" description = "" readme = "README.md" authors = [] diff --git a/src/schematic/__init__.py b/src/schematic/__init__.py index 9e66e91..b7e55f6 100644 --- a/src/schematic/__init__.py +++ b/src/schematic/__init__.py @@ -8,7 +8,6 @@ ApiKeyRequestListResponseData, ApiKeyRequestResponseData, ApiKeyResponseData, - AudienceRequestBody, BillingCouponResponseData, BillingCreditBundleResponseData, BillingCreditBundleView, @@ -145,11 +144,13 @@ ManagePlanResponseResponseData, MeterRequestBody, OrderedPlansInGroup, - PaginationFilter, PaymentMethodRequestBody, PaymentMethodResponseData, - PlanAudienceDetailResponseData, - PlanAudienceResponseData, + PlanChangeResponseData, + PlanChangeResponseDataAction, + PlanChangeResponseDataActorType, + PlanChangeResponseDataBasePlanAction, + PlanChangeResponseDataSubscriptionChangeAction, PlanCreditGrantView, PlanDetailResponseData, PlanEntitlementResponseData, @@ -162,6 +163,7 @@ PlanIssueResponseData, PlanResponseData, PlanSelection, + PlanSnapshotView, PlanTraitResponseData, PreviewObject, PreviewObjectResponseData, @@ -181,6 +183,7 @@ RulesDetailResponseData, SegmentStatusResp, StripeEmbedInfo, + SubscriptionTraitUpdate, TemporaryAccessTokenResponseData, TraitDefinition, UpdateAddOnRequestBody, @@ -345,6 +348,7 @@ GetEntityTraitValuesResponse, GetOrCreateCompanyMembershipResponse, GetOrCreateEntityTraitDefinitionResponse, + GetPlanChangeResponse, GetPlanTraitResponse, GetUserResponse, ListCompaniesForAdvancedFilterParams, @@ -365,6 +369,8 @@ ListEntityTraitDefinitionsResponse, ListEntityTraitDefinitionsResponseParamsEntityType, ListEntityTraitDefinitionsResponseParamsTraitType, + ListPlanChangesParams, + ListPlanChangesResponse, ListPlanTraitsParams, ListPlanTraitsResponse, ListUsersParams, @@ -534,8 +540,6 @@ from .features import ( CheckFlagResponse, CheckFlagsResponse, - CountAudienceCompaniesResponse, - CountAudienceUsersResponse, CountFeaturesParams, CountFeaturesResponse, CountFlagsParams, @@ -548,8 +552,6 @@ DeleteFlagResponse, GetFeatureResponse, GetFlagResponse, - ListAudienceCompaniesResponse, - ListAudienceUsersResponse, ListFeaturesParams, ListFeaturesResponse, ListFlagsParams, @@ -568,9 +570,7 @@ CountPlansResponseParamsPlanType, CreatePlanRequestBodyPlanType, CreatePlanResponse, - DeleteAudienceResponse, DeletePlanResponse, - GetAudienceResponse, GetPlanResponse, ListPlanIssuesParams, ListPlanIssuesResponse, @@ -578,7 +578,6 @@ ListPlansRequestPlanType, ListPlansResponse, ListPlansResponseParamsPlanType, - UpdateAudienceResponse, UpdateCompanyPlansResponse, UpdatePlanResponse, UpsertBillingProductPlanResponse, @@ -612,7 +611,6 @@ "ApiKeyResponseData", "AsyncSchematic", "AsyncSchematicConfig", - "AudienceRequestBody", "BadRequestError", "BillingCouponResponseData", "BillingCreditBundleResponseData", @@ -676,8 +674,6 @@ "CountApiKeysResponse", "CountApiRequestsParams", "CountApiRequestsResponse", - "CountAudienceCompaniesResponse", - "CountAudienceUsersResponse", "CountBillingCreditsGrantsParams", "CountBillingCreditsGrantsResponse", "CountBillingCreditsParams", @@ -829,7 +825,6 @@ "DataExportResponseData", "Decimal", "DeleteApiKeyResponse", - "DeleteAudienceResponse", "DeleteBillingPlanCreditGrantResponse", "DeleteBillingProductResponse", "DeleteCompanyByKeysResponse", @@ -891,7 +886,6 @@ "GetActiveDealsResponse", "GetApiKeyResponse", "GetApiRequestResponse", - "GetAudienceResponse", "GetCheckoutDataResponse", "GetCompanyOverrideResponse", "GetCompanyResponse", @@ -914,6 +908,7 @@ "GetFlagResponse", "GetOrCreateCompanyMembershipResponse", "GetOrCreateEntityTraitDefinitionResponse", + "GetPlanChangeResponse", "GetPlanEntitlementResponse", "GetPlanGroupResponse", "GetPlanResponse", @@ -934,8 +929,6 @@ "ListApiKeysResponse", "ListApiRequestsParams", "ListApiRequestsResponse", - "ListAudienceCompaniesResponse", - "ListAudienceUsersResponse", "ListBillingCreditsParams", "ListBillingCreditsResponse", "ListBillingPlanCreditGrantsParams", @@ -1006,6 +999,8 @@ "ListMetersResponse", "ListPaymentMethodsParams", "ListPaymentMethodsResponse", + "ListPlanChangesParams", + "ListPlanChangesResponse", "ListPlanEntitlementsParams", "ListPlanEntitlementsResponse", "ListPlanIssuesParams", @@ -1038,11 +1033,13 @@ "MeterRequestBody", "NotFoundError", "OrderedPlansInGroup", - "PaginationFilter", "PaymentMethodRequestBody", "PaymentMethodResponseData", - "PlanAudienceDetailResponseData", - "PlanAudienceResponseData", + "PlanChangeResponseData", + "PlanChangeResponseDataAction", + "PlanChangeResponseDataActorType", + "PlanChangeResponseDataBasePlanAction", + "PlanChangeResponseDataSubscriptionChangeAction", "PlanCreditGrantView", "PlanDetailResponseData", "PlanEntitlementResponseData", @@ -1055,6 +1052,7 @@ "PlanIssueResponseData", "PlanResponseData", "PlanSelection", + "PlanSnapshotView", "PlanTraitResponseData", "PreviewCheckoutInternalResponse", "PreviewComponentDataParams", @@ -1089,12 +1087,12 @@ "SegmentStatusResp", "SoftDeleteBillingCreditResponse", "StripeEmbedInfo", + "SubscriptionTraitUpdate", "TemporaryAccessTokenResponseData", "TraitDefinition", "UnauthorizedError", "UpdateAddOnRequestBody", "UpdateApiKeyResponse", - "UpdateAudienceResponse", "UpdateBillingCreditRequestBodyBurnStrategy", "UpdateBillingCreditRequestBodyDefaultRolloverPolicy", "UpdateBillingCreditResponse", diff --git a/src/schematic/base_client.py b/src/schematic/base_client.py index 5d38695..38f8a34 100644 --- a/src/schematic/base_client.py +++ b/src/schematic/base_client.py @@ -86,7 +86,6 @@ def __init__( ) self._raw_client = RawBaseSchematic(client_wrapper=self._client_wrapper) 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) @@ -97,6 +96,7 @@ def __init__( self.crm = CrmClient(client_wrapper=self._client_wrapper) self.dataexports = DataexportsClient(client_wrapper=self._client_wrapper) self.events = EventsClient(client_wrapper=self._client_wrapper) + self.features = FeaturesClient(client_wrapper=self._client_wrapper) self.plangroups = PlangroupsClient(client_wrapper=self._client_wrapper) self.accesstokens = AccesstokensClient(client_wrapper=self._client_wrapper) self.webhooks = WebhooksClient(client_wrapper=self._client_wrapper) @@ -112,33 +112,14 @@ def with_raw_response(self) -> RawBaseSchematic: """ return self._raw_client - def get_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: + def put_plan_audiences_plan_audience_id( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: """ Parameters ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.get_credit() - """ - _response = self._raw_client.get_credit(request_options=request_options) - return _response.data + plan_audience_id : str - def update_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -153,84 +134,23 @@ def update_credit(self, *, request_options: typing.Optional[RequestOptions] = No client = Schematic( api_key="YOUR_API_KEY", ) - client.update_credit() - """ - _response = self._raw_client.update_credit(request_options=request_options) - return _response.data - - def delete_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", + client.put_plan_audiences_plan_audience_id( + plan_audience_id="plan_audience_id", ) - client.delete_credit() """ - _response = self._raw_client.delete_credit(request_options=request_options) - return _response.data - - def get_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", + _response = self._raw_client.put_plan_audiences_plan_audience_id( + plan_audience_id, request_options=request_options ) - client.get_credit_bundle() - """ - _response = self._raw_client.get_credit_bundle(request_options=request_options) return _response.data - def purchase_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: + def delete_plan_audiences_plan_audience_id( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: """ Parameters ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. + plan_audience_id : str - Returns - ------- - None - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.purchase_credit_bundle() - """ - _response = self._raw_client.purchase_credit_bundle(request_options=request_options) - return _response.data - - def update_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -245,55 +165,13 @@ def update_credit_bundle(self, *, request_options: typing.Optional[RequestOption client = Schematic( api_key="YOUR_API_KEY", ) - client.update_credit_bundle() - """ - _response = self._raw_client.update_credit_bundle(request_options=request_options) - return _response.data - - def zero_out_credit_grant(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", + client.delete_plan_audiences_plan_audience_id( + plan_audience_id="plan_audience_id", ) - client.zero_out_credit_grant() """ - _response = self._raw_client.zero_out_credit_grant(request_options=request_options) - return _response.data - - def delete_plan_credit_grant(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", + _response = self._raw_client.delete_plan_audiences_plan_audience_id( + plan_audience_id, request_options=request_options ) - client.delete_plan_credit_grant() - """ - _response = self._raw_client.delete_plan_credit_grant(request_options=request_options) return _response.data @@ -359,7 +237,6 @@ def __init__( ) self._raw_client = AsyncRawBaseSchematic(client_wrapper=self._client_wrapper) 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) @@ -370,6 +247,7 @@ def __init__( self.crm = AsyncCrmClient(client_wrapper=self._client_wrapper) self.dataexports = AsyncDataexportsClient(client_wrapper=self._client_wrapper) self.events = AsyncEventsClient(client_wrapper=self._client_wrapper) + self.features = AsyncFeaturesClient(client_wrapper=self._client_wrapper) self.plangroups = AsyncPlangroupsClient(client_wrapper=self._client_wrapper) self.accesstokens = AsyncAccesstokensClient(client_wrapper=self._client_wrapper) self.webhooks = AsyncWebhooksClient(client_wrapper=self._client_wrapper) @@ -385,72 +263,14 @@ def with_raw_response(self) -> AsyncRawBaseSchematic: """ return self._raw_client - async def get_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.get_credit() - - - asyncio.run(main()) - """ - _response = await self._raw_client.get_credit(request_options=request_options) - return _response.data - - async def update_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: + async def put_plan_audiences_plan_audience_id( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: """ Parameters ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.update_credit() - - - asyncio.run(main()) - """ - _response = await self._raw_client.update_credit(request_options=request_options) - return _response.data + plan_audience_id : str - async def delete_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -470,111 +290,26 @@ async def delete_credit(self, *, request_options: typing.Optional[RequestOptions async def main() -> None: - await client.delete_credit() + await client.put_plan_audiences_plan_audience_id( + plan_audience_id="plan_audience_id", + ) asyncio.run(main()) """ - _response = await self._raw_client.delete_credit(request_options=request_options) - return _response.data - - async def get_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", + _response = await self._raw_client.put_plan_audiences_plan_audience_id( + plan_audience_id, request_options=request_options ) - - - async def main() -> None: - await client.get_credit_bundle() - - - asyncio.run(main()) - """ - _response = await self._raw_client.get_credit_bundle(request_options=request_options) return _response.data - async def purchase_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: + async def delete_plan_audiences_plan_audience_id( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: """ Parameters ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic + plan_audience_id : str - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.purchase_credit_bundle() - - - asyncio.run(main()) - """ - _response = await self._raw_client.purchase_credit_bundle(request_options=request_options) - return _response.data - - async def update_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.update_credit_bundle() - - - asyncio.run(main()) - """ - _response = await self._raw_client.update_credit_bundle(request_options=request_options) - return _response.data - - async def zero_out_credit_grant(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -594,43 +329,16 @@ async def zero_out_credit_grant(self, *, request_options: typing.Optional[Reques async def main() -> None: - await client.zero_out_credit_grant() + await client.delete_plan_audiences_plan_audience_id( + plan_audience_id="plan_audience_id", + ) asyncio.run(main()) """ - _response = await self._raw_client.zero_out_credit_grant(request_options=request_options) - return _response.data - - async def delete_plan_credit_grant(self, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", + _response = await self._raw_client.delete_plan_audiences_plan_audience_id( + plan_audience_id, request_options=request_options ) - - - async def main() -> None: - await client.delete_plan_credit_grant() - - - asyncio.run(main()) - """ - _response = await self._raw_client.delete_plan_credit_grant(request_options=request_options) return _response.data diff --git a/src/schematic/companies/__init__.py b/src/schematic/companies/__init__.py index 4038ece..a8eabcf 100644 --- a/src/schematic/companies/__init__.py +++ b/src/schematic/companies/__init__.py @@ -44,6 +44,7 @@ GetEntityTraitValuesResponse, GetOrCreateCompanyMembershipResponse, GetOrCreateEntityTraitDefinitionResponse, + GetPlanChangeResponse, GetPlanTraitResponse, GetUserResponse, ListCompaniesForAdvancedFilterParams, @@ -64,6 +65,8 @@ ListEntityTraitDefinitionsResponse, ListEntityTraitDefinitionsResponseParamsEntityType, ListEntityTraitDefinitionsResponseParamsTraitType, + ListPlanChangesParams, + ListPlanChangesResponse, ListPlanTraitsParams, ListPlanTraitsResponse, ListUsersParams, @@ -124,6 +127,7 @@ "GetEntityTraitValuesResponse", "GetOrCreateCompanyMembershipResponse", "GetOrCreateEntityTraitDefinitionResponse", + "GetPlanChangeResponse", "GetPlanTraitResponse", "GetUserResponse", "ListCompaniesForAdvancedFilterParams", @@ -144,6 +148,8 @@ "ListEntityTraitDefinitionsResponse", "ListEntityTraitDefinitionsResponseParamsEntityType", "ListEntityTraitDefinitionsResponseParamsTraitType", + "ListPlanChangesParams", + "ListPlanChangesResponse", "ListPlanTraitsParams", "ListPlanTraitsResponse", "ListUsersParams", diff --git a/src/schematic/companies/client.py b/src/schematic/companies/client.py index 71aee75..2461d6e 100644 --- a/src/schematic/companies/client.py +++ b/src/schematic/companies/client.py @@ -41,6 +41,7 @@ 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_change_response import GetPlanChangeResponse 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 ( @@ -54,6 +55,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_changes_response import ListPlanChangesResponse from .types.list_plan_traits_response import ListPlanTraitsResponse from .types.list_users_response import ListUsersResponse from .types.lookup_company_response import LookupCompanyResponse @@ -1384,6 +1386,103 @@ def get_entity_trait_values( ) return _response.data + def list_plan_changes( + self, + *, + action: typing.Optional[str] = None, + base_plan_action: typing.Optional[str] = None, + company_id: typing.Optional[str] = None, + company_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_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, + ) -> ListPlanChangesResponse: + """ + Parameters + ---------- + action : typing.Optional[str] + + base_plan_action : typing.Optional[str] + + company_id : typing.Optional[str] + + company_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + plan_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 + ------- + ListPlanChangesResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.list_plan_changes( + action="action", + base_plan_action="base_plan_action", + company_id="company_id", + limit=1, + offset=1, + ) + """ + _response = self._raw_client.list_plan_changes( + action=action, + base_plan_action=base_plan_action, + company_id=company_id, + company_ids=company_ids, + plan_ids=plan_ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + def get_plan_change( + self, plan_change_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetPlanChangeResponse: + """ + Parameters + ---------- + plan_change_id : str + plan_change_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetPlanChangeResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.companies.get_plan_change( + plan_change_id="plan_change_id", + ) + """ + _response = self._raw_client.get_plan_change(plan_change_id, request_options=request_options) + return _response.data + def list_plan_traits( self, *, @@ -3664,6 +3763,119 @@ async def main() -> None: ) return _response.data + async def list_plan_changes( + self, + *, + action: typing.Optional[str] = None, + base_plan_action: typing.Optional[str] = None, + company_id: typing.Optional[str] = None, + company_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_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, + ) -> ListPlanChangesResponse: + """ + Parameters + ---------- + action : typing.Optional[str] + + base_plan_action : typing.Optional[str] + + company_id : typing.Optional[str] + + company_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + plan_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 + ------- + ListPlanChangesResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.list_plan_changes( + action="action", + base_plan_action="base_plan_action", + company_id="company_id", + limit=1, + offset=1, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_plan_changes( + action=action, + base_plan_action=base_plan_action, + company_id=company_id, + company_ids=company_ids, + plan_ids=plan_ids, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + + async def get_plan_change( + self, plan_change_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetPlanChangeResponse: + """ + Parameters + ---------- + plan_change_id : str + plan_change_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetPlanChangeResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.companies.get_plan_change( + plan_change_id="plan_change_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_plan_change(plan_change_id, request_options=request_options) + return _response.data + async def list_plan_traits( self, *, diff --git a/src/schematic/companies/raw_client.py b/src/schematic/companies/raw_client.py index 884c6ac..113525a 100644 --- a/src/schematic/companies/raw_client.py +++ b/src/schematic/companies/raw_client.py @@ -52,6 +52,7 @@ 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_change_response import GetPlanChangeResponse 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 ( @@ -65,6 +66,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_changes_response import ListPlanChangesResponse from .types.list_plan_traits_response import ListPlanTraitsResponse from .types.list_users_response import ListUsersResponse from .types.lookup_company_response import LookupCompanyResponse @@ -2919,6 +2921,218 @@ def get_entity_trait_values( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def list_plan_changes( + self, + *, + action: typing.Optional[str] = None, + base_plan_action: typing.Optional[str] = None, + company_id: typing.Optional[str] = None, + company_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_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[ListPlanChangesResponse]: + """ + Parameters + ---------- + action : typing.Optional[str] + + base_plan_action : typing.Optional[str] + + company_id : typing.Optional[str] + + company_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + plan_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[ListPlanChangesResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "plan-changes", + method="GET", + params={ + "action": action, + "base_plan_action": base_plan_action, + "company_id": company_id, + "company_ids": company_ids, + "plan_ids": plan_ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListPlanChangesResponse, + parse_obj_as( + type_=ListPlanChangesResponse, # 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_plan_change( + self, plan_change_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetPlanChangeResponse]: + """ + Parameters + ---------- + plan_change_id : str + plan_change_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetPlanChangeResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"plan-changes/{jsonable_encoder(plan_change_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetPlanChangeResponse, + parse_obj_as( + type_=GetPlanChangeResponse, # 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 list_plan_traits( self, *, @@ -7561,6 +7775,218 @@ async def get_entity_trait_values( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + async def list_plan_changes( + self, + *, + action: typing.Optional[str] = None, + base_plan_action: typing.Optional[str] = None, + company_id: typing.Optional[str] = None, + company_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_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[ListPlanChangesResponse]: + """ + Parameters + ---------- + action : typing.Optional[str] + + base_plan_action : typing.Optional[str] + + company_id : typing.Optional[str] + + company_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + plan_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[ListPlanChangesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "plan-changes", + method="GET", + params={ + "action": action, + "base_plan_action": base_plan_action, + "company_id": company_id, + "company_ids": company_ids, + "plan_ids": plan_ids, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListPlanChangesResponse, + parse_obj_as( + type_=ListPlanChangesResponse, # 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_change( + self, plan_change_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetPlanChangeResponse]: + """ + Parameters + ---------- + plan_change_id : str + plan_change_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetPlanChangeResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"plan-changes/{jsonable_encoder(plan_change_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetPlanChangeResponse, + parse_obj_as( + type_=GetPlanChangeResponse, # 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 list_plan_traits( self, *, diff --git a/src/schematic/companies/types/__init__.py b/src/schematic/companies/types/__init__.py index bf6028d..fd6c194 100644 --- a/src/schematic/companies/types/__init__.py +++ b/src/schematic/companies/types/__init__.py @@ -51,6 +51,7 @@ 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_change_response import GetPlanChangeResponse from .get_plan_trait_response import GetPlanTraitResponse from .get_user_response import GetUserResponse from .list_companies_for_advanced_filter_params import ListCompaniesForAdvancedFilterParams @@ -77,6 +78,8 @@ ListEntityTraitDefinitionsResponseParamsEntityType, ) from .list_entity_trait_definitions_response_params_trait_type import ListEntityTraitDefinitionsResponseParamsTraitType +from .list_plan_changes_params import ListPlanChangesParams +from .list_plan_changes_response import ListPlanChangesResponse from .list_plan_traits_params import ListPlanTraitsParams from .list_plan_traits_response import ListPlanTraitsResponse from .list_users_params import ListUsersParams @@ -136,6 +139,7 @@ "GetEntityTraitValuesResponse", "GetOrCreateCompanyMembershipResponse", "GetOrCreateEntityTraitDefinitionResponse", + "GetPlanChangeResponse", "GetPlanTraitResponse", "GetUserResponse", "ListCompaniesForAdvancedFilterParams", @@ -156,6 +160,8 @@ "ListEntityTraitDefinitionsResponse", "ListEntityTraitDefinitionsResponseParamsEntityType", "ListEntityTraitDefinitionsResponseParamsTraitType", + "ListPlanChangesParams", + "ListPlanChangesResponse", "ListPlanTraitsParams", "ListPlanTraitsResponse", "ListUsersParams", diff --git a/src/schematic/features/types/count_audience_companies_response.py b/src/schematic/companies/types/get_plan_change_response.py similarity index 79% rename from src/schematic/features/types/count_audience_companies_response.py rename to src/schematic/companies/types/get_plan_change_response.py index 42942bf..a912904 100644 --- a/src/schematic/features/types/count_audience_companies_response.py +++ b/src/schematic/companies/types/get_plan_change_response.py @@ -4,11 +4,11 @@ import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from ...types.count_response import CountResponse +from ...types.plan_change_response_data import PlanChangeResponseData -class CountAudienceCompaniesResponse(UniversalBaseModel): - data: CountResponse +class GetPlanChangeResponse(UniversalBaseModel): + data: PlanChangeResponseData params: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field() """ Input parameters diff --git a/src/schematic/types/audience_request_body.py b/src/schematic/companies/types/list_plan_changes_params.py similarity index 55% rename from src/schematic/types/audience_request_body.py rename to src/schematic/companies/types/list_plan_changes_params.py index 0c29b63..b9eb13b 100644 --- a/src/schematic/types/audience_request_body.py +++ b/src/schematic/companies/types/list_plan_changes_params.py @@ -3,14 +3,18 @@ import typing import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody -from .create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -class AudienceRequestBody(UniversalBaseModel): - condition_groups: typing.List[CreateOrUpdateConditionGroupRequestBody] - conditions: typing.List[CreateOrUpdateConditionRequestBody] +class ListPlanChangesParams(UniversalBaseModel): + """ + Input parameters + """ + + action: typing.Optional[str] = None + base_plan_action: typing.Optional[str] = None + company_id: typing.Optional[str] = None + company_ids: typing.Optional[typing.List[str]] = None limit: typing.Optional[int] = pydantic.Field(default=None) """ Page limit (default 100) @@ -21,7 +25,7 @@ class AudienceRequestBody(UniversalBaseModel): Page offset (default 0) """ - q: 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 diff --git a/src/schematic/features/types/list_audience_users_response.py b/src/schematic/companies/types/list_plan_changes_response.py similarity index 65% rename from src/schematic/features/types/list_audience_users_response.py rename to src/schematic/companies/types/list_plan_changes_response.py index cee9c84..59f1800 100644 --- a/src/schematic/features/types/list_audience_users_response.py +++ b/src/schematic/companies/types/list_plan_changes_response.py @@ -4,12 +4,13 @@ import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from ...types.user_detail_response_data import UserDetailResponseData +from ...types.plan_change_response_data import PlanChangeResponseData +from .list_plan_changes_params import ListPlanChangesParams -class ListAudienceUsersResponse(UniversalBaseModel): - data: typing.List[UserDetailResponseData] - params: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field() +class ListPlanChangesResponse(UniversalBaseModel): + data: typing.List[PlanChangeResponseData] + params: ListPlanChangesParams = pydantic.Field() """ Input parameters """ diff --git a/src/schematic/core/client_wrapper.py b/src/schematic/core/client_wrapper.py index 2619fb9..f85f3a3 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.1.1", + "User-Agent": "schematichq/1.1.2", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "schematichq", - "X-Fern-SDK-Version": "1.1.1", + "X-Fern-SDK-Version": "1.1.2", } headers["X-Schematic-Api-Key"] = self.api_key return headers diff --git a/src/schematic/credits/client.py b/src/schematic/credits/client.py index e13516a..9bc50b0 100644 --- a/src/schematic/credits/client.py +++ b/src/schematic/credits/client.py @@ -218,13 +218,13 @@ def create_billing_credit( return _response.data def get_single_billing_credit( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> GetSingleBillingCreditResponse: """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -242,15 +242,15 @@ def get_single_billing_credit( api_key="YOUR_API_KEY", ) client.credits.get_single_billing_credit( - billing_id="billing_id", + credit_id="credit_id", ) """ - _response = self._raw_client.get_single_billing_credit(billing_id, request_options=request_options) + _response = self._raw_client.get_single_billing_credit(credit_id, request_options=request_options) return _response.data def update_billing_credit( self, - billing_id: str, + credit_id: str, *, description: str, name: str, @@ -268,8 +268,8 @@ def update_billing_credit( """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id description : str @@ -309,13 +309,13 @@ def update_billing_credit( api_key="YOUR_API_KEY", ) client.credits.update_billing_credit( - billing_id="billing_id", + credit_id="credit_id", description="description", name="name", ) """ _response = self._raw_client.update_billing_credit( - billing_id, + credit_id, description=description, name=name, burn_strategy=burn_strategy, @@ -332,13 +332,13 @@ def update_billing_credit( return _response.data def soft_delete_billing_credit( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> SoftDeleteBillingCreditResponse: """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -356,10 +356,10 @@ def soft_delete_billing_credit( api_key="YOUR_API_KEY", ) client.credits.soft_delete_billing_credit( - billing_id="billing_id", + credit_id="credit_id", ) """ - _response = self._raw_client.soft_delete_billing_credit(billing_id, request_options=request_options) + _response = self._raw_client.soft_delete_billing_credit(credit_id, request_options=request_options) return _response.data def list_credit_bundles( @@ -503,13 +503,13 @@ def create_credit_bundle( return _response.data def get_credit_bundle( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> GetCreditBundleResponse: """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -527,15 +527,15 @@ def get_credit_bundle( api_key="YOUR_API_KEY", ) client.credits.get_credit_bundle( - billing_id="billing_id", + bundle_id="bundle_id", ) """ - _response = self._raw_client.get_credit_bundle(billing_id, request_options=request_options) + _response = self._raw_client.get_credit_bundle(bundle_id, request_options=request_options) return _response.data def update_credit_bundle_details( self, - billing_id: str, + bundle_id: str, *, bundle_name: str, price_per_unit: int, @@ -550,8 +550,8 @@ def update_credit_bundle_details( """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id bundle_name : str @@ -585,13 +585,13 @@ def update_credit_bundle_details( api_key="YOUR_API_KEY", ) client.credits.update_credit_bundle_details( - billing_id="billing_id", + bundle_id="bundle_id", bundle_name="bundle_name", price_per_unit=1, ) """ _response = self._raw_client.update_credit_bundle_details( - billing_id, + bundle_id, bundle_name=bundle_name, price_per_unit=price_per_unit, expiry_type=expiry_type, @@ -605,13 +605,13 @@ def update_credit_bundle_details( return _response.data def delete_credit_bundle( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> DeleteCreditBundleResponse: """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -629,10 +629,10 @@ def delete_credit_bundle( api_key="YOUR_API_KEY", ) client.credits.delete_credit_bundle( - billing_id="billing_id", + bundle_id="bundle_id", ) """ - _response = self._raw_client.delete_credit_bundle(billing_id, request_options=request_options) + _response = self._raw_client.delete_credit_bundle(bundle_id, request_options=request_options) return _response.data def count_credit_bundles( @@ -746,7 +746,7 @@ def count_billing_credits( def zero_out_grant( self, - billing_id: str, + grant_id: str, *, reason: typing.Optional[ZeroOutGrantRequestBodyReason] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -754,8 +754,8 @@ def zero_out_grant( """ Parameters ---------- - billing_id : str - billing_id + grant_id : str + grant_id reason : typing.Optional[ZeroOutGrantRequestBodyReason] @@ -775,10 +775,10 @@ def zero_out_grant( api_key="YOUR_API_KEY", ) client.credits.zero_out_grant( - billing_id="billing_id", + grant_id="grant_id", ) """ - _response = self._raw_client.zero_out_grant(billing_id, reason=reason, request_options=request_options) + _response = self._raw_client.zero_out_grant(grant_id, reason=reason, request_options=request_options) return _response.data def grant_billing_credits_to_company( @@ -1281,13 +1281,13 @@ def create_billing_plan_credit_grant( return _response.data def delete_billing_plan_credit_grant( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, plan_grant_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> DeleteBillingPlanCreditGrantResponse: """ Parameters ---------- - billing_id : str - billing_id + plan_grant_id : str + plan_grant_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1305,10 +1305,10 @@ def delete_billing_plan_credit_grant( api_key="YOUR_API_KEY", ) client.credits.delete_billing_plan_credit_grant( - billing_id="billing_id", + plan_grant_id="plan_grant_id", ) """ - _response = self._raw_client.delete_billing_plan_credit_grant(billing_id, request_options=request_options) + _response = self._raw_client.delete_billing_plan_credit_grant(plan_grant_id, request_options=request_options) return _response.data def count_billing_plan_credit_grants( @@ -1535,13 +1535,13 @@ async def main() -> None: return _response.data async def get_single_billing_credit( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> GetSingleBillingCreditResponse: """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1564,18 +1564,18 @@ async def get_single_billing_credit( async def main() -> None: await client.credits.get_single_billing_credit( - billing_id="billing_id", + credit_id="credit_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_single_billing_credit(billing_id, request_options=request_options) + _response = await self._raw_client.get_single_billing_credit(credit_id, request_options=request_options) return _response.data async def update_billing_credit( self, - billing_id: str, + credit_id: str, *, description: str, name: str, @@ -1593,8 +1593,8 @@ async def update_billing_credit( """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id description : str @@ -1639,7 +1639,7 @@ async def update_billing_credit( async def main() -> None: await client.credits.update_billing_credit( - billing_id="billing_id", + credit_id="credit_id", description="description", name="name", ) @@ -1648,7 +1648,7 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.update_billing_credit( - billing_id, + credit_id, description=description, name=name, burn_strategy=burn_strategy, @@ -1665,13 +1665,13 @@ async def main() -> None: return _response.data async def soft_delete_billing_credit( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> SoftDeleteBillingCreditResponse: """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1694,13 +1694,13 @@ async def soft_delete_billing_credit( async def main() -> None: await client.credits.soft_delete_billing_credit( - billing_id="billing_id", + credit_id="credit_id", ) asyncio.run(main()) """ - _response = await self._raw_client.soft_delete_billing_credit(billing_id, request_options=request_options) + _response = await self._raw_client.soft_delete_billing_credit(credit_id, request_options=request_options) return _response.data async def list_credit_bundles( @@ -1860,13 +1860,13 @@ async def main() -> None: return _response.data async def get_credit_bundle( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> GetCreditBundleResponse: """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1889,18 +1889,18 @@ async def get_credit_bundle( async def main() -> None: await client.credits.get_credit_bundle( - billing_id="billing_id", + bundle_id="bundle_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_credit_bundle(billing_id, request_options=request_options) + _response = await self._raw_client.get_credit_bundle(bundle_id, request_options=request_options) return _response.data async def update_credit_bundle_details( self, - billing_id: str, + bundle_id: str, *, bundle_name: str, price_per_unit: int, @@ -1915,8 +1915,8 @@ async def update_credit_bundle_details( """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id bundle_name : str @@ -1955,7 +1955,7 @@ async def update_credit_bundle_details( async def main() -> None: await client.credits.update_credit_bundle_details( - billing_id="billing_id", + bundle_id="bundle_id", bundle_name="bundle_name", price_per_unit=1, ) @@ -1964,7 +1964,7 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.update_credit_bundle_details( - billing_id, + bundle_id, bundle_name=bundle_name, price_per_unit=price_per_unit, expiry_type=expiry_type, @@ -1978,13 +1978,13 @@ async def main() -> None: return _response.data async def delete_credit_bundle( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> DeleteCreditBundleResponse: """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -2007,13 +2007,13 @@ async def delete_credit_bundle( async def main() -> None: await client.credits.delete_credit_bundle( - billing_id="billing_id", + bundle_id="bundle_id", ) asyncio.run(main()) """ - _response = await self._raw_client.delete_credit_bundle(billing_id, request_options=request_options) + _response = await self._raw_client.delete_credit_bundle(bundle_id, request_options=request_options) return _response.data async def count_credit_bundles( @@ -2143,7 +2143,7 @@ async def main() -> None: async def zero_out_grant( self, - billing_id: str, + grant_id: str, *, reason: typing.Optional[ZeroOutGrantRequestBodyReason] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -2151,8 +2151,8 @@ async def zero_out_grant( """ Parameters ---------- - billing_id : str - billing_id + grant_id : str + grant_id reason : typing.Optional[ZeroOutGrantRequestBodyReason] @@ -2177,13 +2177,13 @@ async def zero_out_grant( async def main() -> None: await client.credits.zero_out_grant( - billing_id="billing_id", + grant_id="grant_id", ) asyncio.run(main()) """ - _response = await self._raw_client.zero_out_grant(billing_id, reason=reason, request_options=request_options) + _response = await self._raw_client.zero_out_grant(grant_id, reason=reason, request_options=request_options) return _response.data async def grant_billing_credits_to_company( @@ -2750,13 +2750,13 @@ async def main() -> None: return _response.data async def delete_billing_plan_credit_grant( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, plan_grant_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> DeleteBillingPlanCreditGrantResponse: """ Parameters ---------- - billing_id : str - billing_id + plan_grant_id : str + plan_grant_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -2779,13 +2779,15 @@ async def delete_billing_plan_credit_grant( async def main() -> None: await client.credits.delete_billing_plan_credit_grant( - billing_id="billing_id", + plan_grant_id="plan_grant_id", ) asyncio.run(main()) """ - _response = await self._raw_client.delete_billing_plan_credit_grant(billing_id, request_options=request_options) + _response = await self._raw_client.delete_billing_plan_credit_grant( + plan_grant_id, request_options=request_options + ) return _response.data async def count_billing_plan_credit_grants( diff --git a/src/schematic/credits/raw_client.py b/src/schematic/credits/raw_client.py index 42c3423..a5fb170 100644 --- a/src/schematic/credits/raw_client.py +++ b/src/schematic/credits/raw_client.py @@ -351,13 +351,13 @@ def create_billing_credit( ) def get_single_billing_credit( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[GetSingleBillingCreditResponse]: """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -368,7 +368,7 @@ def get_single_billing_credit( OK """ _response = self._client_wrapper.httpx_client.request( - f"billing/credits/{jsonable_encoder(billing_id)}", + f"billing/credits/{jsonable_encoder(credit_id)}", method="GET", request_options=request_options, ) @@ -437,7 +437,7 @@ def get_single_billing_credit( def update_billing_credit( self, - billing_id: str, + credit_id: str, *, description: str, name: str, @@ -455,8 +455,8 @@ def update_billing_credit( """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id description : str @@ -489,7 +489,7 @@ def update_billing_credit( OK """ _response = self._client_wrapper.httpx_client.request( - f"billing/credits/{jsonable_encoder(billing_id)}", + f"billing/credits/{jsonable_encoder(credit_id)}", method="PUT", json={ "burn_strategy": burn_strategy, @@ -585,13 +585,13 @@ def update_billing_credit( ) def soft_delete_billing_credit( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[SoftDeleteBillingCreditResponse]: """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -602,7 +602,7 @@ def soft_delete_billing_credit( OK """ _response = self._client_wrapper.httpx_client.request( - f"billing/credits/{jsonable_encoder(billing_id)}", + f"billing/credits/{jsonable_encoder(credit_id)}", method="DELETE", request_options=request_options, ) @@ -949,13 +949,13 @@ def create_credit_bundle( ) def get_credit_bundle( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[GetCreditBundleResponse]: """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -966,7 +966,7 @@ def get_credit_bundle( OK """ _response = self._client_wrapper.httpx_client.request( - f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + f"billing/credits/bundles/{jsonable_encoder(bundle_id)}", method="GET", request_options=request_options, ) @@ -1035,7 +1035,7 @@ def get_credit_bundle( def update_credit_bundle_details( self, - billing_id: str, + bundle_id: str, *, bundle_name: str, price_per_unit: int, @@ -1050,8 +1050,8 @@ def update_credit_bundle_details( """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id bundle_name : str @@ -1078,7 +1078,7 @@ def update_credit_bundle_details( OK """ _response = self._client_wrapper.httpx_client.request( - f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + f"billing/credits/bundles/{jsonable_encoder(bundle_id)}", method="PUT", json={ "bundle_name": bundle_name, @@ -1171,13 +1171,13 @@ def update_credit_bundle_details( ) def delete_credit_bundle( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[DeleteCreditBundleResponse]: """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1188,7 +1188,7 @@ def delete_credit_bundle( OK """ _response = self._client_wrapper.httpx_client.request( - f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + f"billing/credits/bundles/{jsonable_encoder(bundle_id)}", method="DELETE", request_options=request_options, ) @@ -1506,7 +1506,7 @@ def count_billing_credits( def zero_out_grant( self, - billing_id: str, + grant_id: str, *, reason: typing.Optional[ZeroOutGrantRequestBodyReason] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -1514,8 +1514,8 @@ def zero_out_grant( """ Parameters ---------- - billing_id : str - billing_id + grant_id : str + grant_id reason : typing.Optional[ZeroOutGrantRequestBodyReason] @@ -1528,7 +1528,7 @@ def zero_out_grant( OK """ _response = self._client_wrapper.httpx_client.request( - f"billing/credits/grants/{jsonable_encoder(billing_id)}/zero-out", + f"billing/credits/grants/{jsonable_encoder(grant_id)}/zero-out", method="PUT", json={ "reason": reason, @@ -2622,13 +2622,13 @@ def create_billing_plan_credit_grant( ) def delete_billing_plan_credit_grant( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, plan_grant_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[DeleteBillingPlanCreditGrantResponse]: """ Parameters ---------- - billing_id : str - billing_id + plan_grant_id : str + plan_grant_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -2639,7 +2639,7 @@ def delete_billing_plan_credit_grant( OK """ _response = self._client_wrapper.httpx_client.request( - f"billing/credits/plan-grants/{jsonable_encoder(billing_id)}", + f"billing/credits/plan-grants/{jsonable_encoder(plan_grant_id)}", method="DELETE", request_options=request_options, ) @@ -3110,13 +3110,13 @@ async def create_billing_credit( ) async def get_single_billing_credit( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[GetSingleBillingCreditResponse]: """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -3127,7 +3127,7 @@ async def get_single_billing_credit( OK """ _response = await self._client_wrapper.httpx_client.request( - f"billing/credits/{jsonable_encoder(billing_id)}", + f"billing/credits/{jsonable_encoder(credit_id)}", method="GET", request_options=request_options, ) @@ -3196,7 +3196,7 @@ async def get_single_billing_credit( async def update_billing_credit( self, - billing_id: str, + credit_id: str, *, description: str, name: str, @@ -3214,8 +3214,8 @@ async def update_billing_credit( """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id description : str @@ -3248,7 +3248,7 @@ async def update_billing_credit( OK """ _response = await self._client_wrapper.httpx_client.request( - f"billing/credits/{jsonable_encoder(billing_id)}", + f"billing/credits/{jsonable_encoder(credit_id)}", method="PUT", json={ "burn_strategy": burn_strategy, @@ -3344,13 +3344,13 @@ async def update_billing_credit( ) async def soft_delete_billing_credit( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[SoftDeleteBillingCreditResponse]: """ Parameters ---------- - billing_id : str - billing_id + credit_id : str + credit_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -3361,7 +3361,7 @@ async def soft_delete_billing_credit( OK """ _response = await self._client_wrapper.httpx_client.request( - f"billing/credits/{jsonable_encoder(billing_id)}", + f"billing/credits/{jsonable_encoder(credit_id)}", method="DELETE", request_options=request_options, ) @@ -3708,13 +3708,13 @@ async def create_credit_bundle( ) async def get_credit_bundle( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[GetCreditBundleResponse]: """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -3725,7 +3725,7 @@ async def get_credit_bundle( OK """ _response = await self._client_wrapper.httpx_client.request( - f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + f"billing/credits/bundles/{jsonable_encoder(bundle_id)}", method="GET", request_options=request_options, ) @@ -3794,7 +3794,7 @@ async def get_credit_bundle( async def update_credit_bundle_details( self, - billing_id: str, + bundle_id: str, *, bundle_name: str, price_per_unit: int, @@ -3809,8 +3809,8 @@ async def update_credit_bundle_details( """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id bundle_name : str @@ -3837,7 +3837,7 @@ async def update_credit_bundle_details( OK """ _response = await self._client_wrapper.httpx_client.request( - f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + f"billing/credits/bundles/{jsonable_encoder(bundle_id)}", method="PUT", json={ "bundle_name": bundle_name, @@ -3930,13 +3930,13 @@ async def update_credit_bundle_details( ) async def delete_credit_bundle( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[DeleteCreditBundleResponse]: """ Parameters ---------- - billing_id : str - billing_id + bundle_id : str + bundle_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -3947,7 +3947,7 @@ async def delete_credit_bundle( OK """ _response = await self._client_wrapper.httpx_client.request( - f"billing/credits/bundles/{jsonable_encoder(billing_id)}", + f"billing/credits/bundles/{jsonable_encoder(bundle_id)}", method="DELETE", request_options=request_options, ) @@ -4265,7 +4265,7 @@ async def count_billing_credits( async def zero_out_grant( self, - billing_id: str, + grant_id: str, *, reason: typing.Optional[ZeroOutGrantRequestBodyReason] = OMIT, request_options: typing.Optional[RequestOptions] = None, @@ -4273,8 +4273,8 @@ async def zero_out_grant( """ Parameters ---------- - billing_id : str - billing_id + grant_id : str + grant_id reason : typing.Optional[ZeroOutGrantRequestBodyReason] @@ -4287,7 +4287,7 @@ async def zero_out_grant( OK """ _response = await self._client_wrapper.httpx_client.request( - f"billing/credits/grants/{jsonable_encoder(billing_id)}/zero-out", + f"billing/credits/grants/{jsonable_encoder(grant_id)}/zero-out", method="PUT", json={ "reason": reason, @@ -5381,13 +5381,13 @@ async def create_billing_plan_credit_grant( ) async def delete_billing_plan_credit_grant( - self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, plan_grant_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[DeleteBillingPlanCreditGrantResponse]: """ Parameters ---------- - billing_id : str - billing_id + plan_grant_id : str + plan_grant_id request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -5398,7 +5398,7 @@ async def delete_billing_plan_credit_grant( OK """ _response = await self._client_wrapper.httpx_client.request( - f"billing/credits/plan-grants/{jsonable_encoder(billing_id)}", + f"billing/credits/plan-grants/{jsonable_encoder(plan_grant_id)}", method="DELETE", request_options=request_options, ) diff --git a/src/schematic/features/__init__.py b/src/schematic/features/__init__.py index 91dcf28..dd943f2 100644 --- a/src/schematic/features/__init__.py +++ b/src/schematic/features/__init__.py @@ -5,8 +5,6 @@ from .types import ( CheckFlagResponse, CheckFlagsResponse, - CountAudienceCompaniesResponse, - CountAudienceUsersResponse, CountFeaturesParams, CountFeaturesResponse, CountFlagsParams, @@ -19,8 +17,6 @@ DeleteFlagResponse, GetFeatureResponse, GetFlagResponse, - ListAudienceCompaniesResponse, - ListAudienceUsersResponse, ListFeaturesParams, ListFeaturesResponse, ListFlagsParams, @@ -35,8 +31,6 @@ __all__ = [ "CheckFlagResponse", "CheckFlagsResponse", - "CountAudienceCompaniesResponse", - "CountAudienceUsersResponse", "CountFeaturesParams", "CountFeaturesResponse", "CountFlagsParams", @@ -49,8 +43,6 @@ "DeleteFlagResponse", "GetFeatureResponse", "GetFlagResponse", - "ListAudienceCompaniesResponse", - "ListAudienceUsersResponse", "ListFeaturesParams", "ListFeaturesResponse", "ListFlagsParams", diff --git a/src/schematic/features/client.py b/src/schematic/features/client.py index 106633a..d00db99 100644 --- a/src/schematic/features/client.py +++ b/src/schematic/features/client.py @@ -4,15 +4,11 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions -from ..types.create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody -from ..types.create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody from ..types.create_or_update_flag_request_body import CreateOrUpdateFlagRequestBody from ..types.create_or_update_rule_request_body import CreateOrUpdateRuleRequestBody from .raw_client import AsyncRawFeaturesClient, RawFeaturesClient from .types.check_flag_response import CheckFlagResponse from .types.check_flags_response import CheckFlagsResponse -from .types.count_audience_companies_response import CountAudienceCompaniesResponse -from .types.count_audience_users_response import CountAudienceUsersResponse from .types.count_features_response import CountFeaturesResponse from .types.count_flags_response import CountFlagsResponse from .types.create_feature_request_body_feature_type import CreateFeatureRequestBodyFeatureType @@ -23,8 +19,6 @@ from .types.delete_flag_response import DeleteFlagResponse from .types.get_feature_response import GetFeatureResponse from .types.get_flag_response import GetFlagResponse -from .types.list_audience_companies_response import ListAudienceCompaniesResponse -from .types.list_audience_users_response import ListAudienceUsersResponse from .types.list_features_response import ListFeaturesResponse from .types.list_flags_response import ListFlagsResponse from .types.update_feature_request_body_feature_type import UpdateFeatureRequestBodyFeatureType @@ -52,306 +46,6 @@ def with_raw_response(self) -> RawFeaturesClient: """ return self._raw_client - def count_audience_companies( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> CountAudienceCompaniesResponse: - """ - Parameters - ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - CountAudienceCompaniesResponse - Created - - Examples - -------- - from schematic import ( - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - Schematic, - ) - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.features.count_audience_companies( - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - """ - _response = self._raw_client.count_audience_companies( - condition_groups=condition_groups, - conditions=conditions, - limit=limit, - offset=offset, - q=q, - request_options=request_options, - ) - return _response.data - - def count_audience_users( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> CountAudienceUsersResponse: - """ - Parameters - ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - CountAudienceUsersResponse - Created - - Examples - -------- - from schematic import ( - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - Schematic, - ) - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.features.count_audience_users( - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - """ - _response = self._raw_client.count_audience_users( - condition_groups=condition_groups, - conditions=conditions, - limit=limit, - offset=offset, - q=q, - request_options=request_options, - ) - return _response.data - - def list_audience_companies( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> ListAudienceCompaniesResponse: - """ - Parameters - ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ListAudienceCompaniesResponse - OK - - Examples - -------- - from schematic import ( - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - Schematic, - ) - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.features.list_audience_companies( - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - """ - _response = self._raw_client.list_audience_companies( - condition_groups=condition_groups, - conditions=conditions, - limit=limit, - offset=offset, - q=q, - request_options=request_options, - ) - return _response.data - - def list_audience_users( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> ListAudienceUsersResponse: - """ - Parameters - ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ListAudienceUsersResponse - OK - - Examples - -------- - from schematic import ( - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - Schematic, - ) - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.features.list_audience_users( - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - """ - _response = self._raw_client.list_audience_users( - condition_groups=condition_groups, - conditions=conditions, - limit=limit, - offset=offset, - q=q, - request_options=request_options, - ) - return _response.data - def list_features( self, *, @@ -1172,338 +866,6 @@ def with_raw_response(self) -> AsyncRawFeaturesClient: """ return self._raw_client - async def count_audience_companies( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> CountAudienceCompaniesResponse: - """ - Parameters - ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - CountAudienceCompaniesResponse - Created - - Examples - -------- - import asyncio - - from schematic import ( - AsyncSchematic, - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - ) - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.features.count_audience_companies( - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.count_audience_companies( - condition_groups=condition_groups, - conditions=conditions, - limit=limit, - offset=offset, - q=q, - request_options=request_options, - ) - return _response.data - - async def count_audience_users( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> CountAudienceUsersResponse: - """ - Parameters - ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - CountAudienceUsersResponse - Created - - Examples - -------- - import asyncio - - from schematic import ( - AsyncSchematic, - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - ) - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.features.count_audience_users( - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.count_audience_users( - condition_groups=condition_groups, - conditions=conditions, - limit=limit, - offset=offset, - q=q, - request_options=request_options, - ) - return _response.data - - async def list_audience_companies( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> ListAudienceCompaniesResponse: - """ - Parameters - ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ListAudienceCompaniesResponse - OK - - Examples - -------- - import asyncio - - from schematic import ( - AsyncSchematic, - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - ) - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.features.list_audience_companies( - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.list_audience_companies( - condition_groups=condition_groups, - conditions=conditions, - limit=limit, - offset=offset, - q=q, - request_options=request_options, - ) - return _response.data - - async def list_audience_users( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> ListAudienceUsersResponse: - """ - Parameters - ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ListAudienceUsersResponse - OK - - Examples - -------- - import asyncio - - from schematic import ( - AsyncSchematic, - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - ) - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.features.list_audience_users( - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.list_audience_users( - condition_groups=condition_groups, - conditions=conditions, - limit=limit, - offset=offset, - q=q, - request_options=request_options, - ) - return _response.data - async def list_features( self, *, diff --git a/src/schematic/features/raw_client.py b/src/schematic/features/raw_client.py index 2b23246..f383f27 100644 --- a/src/schematic/features/raw_client.py +++ b/src/schematic/features/raw_client.py @@ -16,14 +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.create_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody -from ..types.create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody from ..types.create_or_update_flag_request_body import CreateOrUpdateFlagRequestBody from ..types.create_or_update_rule_request_body import CreateOrUpdateRuleRequestBody from .types.check_flag_response import CheckFlagResponse from .types.check_flags_response import CheckFlagsResponse -from .types.count_audience_companies_response import CountAudienceCompaniesResponse -from .types.count_audience_users_response import CountAudienceUsersResponse from .types.count_features_response import CountFeaturesResponse from .types.count_flags_response import CountFlagsResponse from .types.create_feature_request_body_feature_type import CreateFeatureRequestBodyFeatureType @@ -34,8 +30,6 @@ from .types.delete_flag_response import DeleteFlagResponse from .types.get_feature_response import GetFeatureResponse from .types.get_flag_response import GetFlagResponse -from .types.list_audience_companies_response import ListAudienceCompaniesResponse -from .types.list_audience_users_response import ListAudienceUsersResponse from .types.list_features_response import ListFeaturesResponse from .types.list_flags_response import ListFlagsResponse from .types.update_feature_request_body_feature_type import UpdateFeatureRequestBodyFeatureType @@ -52,22 +46,38 @@ class RawFeaturesClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def count_audience_companies( + def list_features( self, *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + 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, - ) -> HttpResponse[CountAudienceCompaniesResponse]: + ) -> HttpResponse[ListFeaturesResponse]: """ Parameters ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + q : typing.Optional[str] + Search by feature name or ID + + without_company_override_for : typing.Optional[str] + Filter out features that already have a company override for the specified company ID + + without_plan_entitlement_for : typing.Optional[str] + Filter out features that already have a plan entitlement for the specified plan ID - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] + 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) @@ -75,46 +85,35 @@ def count_audience_companies( offset : typing.Optional[int] Page offset (default 0) - q : typing.Optional[str] - request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CountAudienceCompaniesResponse] - Created + HttpResponse[ListFeaturesResponse] + OK """ _response = self._client_wrapper.httpx_client.request( - "audience/count-companies", - method="POST", - 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", - ), + "features", + method="GET", + params={ + "ids": ids, + "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, - "q": q, - }, - headers={ - "content-type": "application/json", }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountAudienceCompaniesResponse, + ListFeaturesResponse, parse_obj_as( - type_=CountAudienceCompaniesResponse, # type: ignore + type_=ListFeaturesResponse, # type: ignore object_=_response.json(), ), ) @@ -183,56 +182,72 @@ def count_audience_companies( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def count_audience_users( + def create_feature( self, *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, + description: str, + feature_type: CreateFeatureRequestBodyFeatureType, + name: str, + event_subtype: typing.Optional[str] = OMIT, + flag: typing.Optional[CreateOrUpdateFlagRequestBody] = OMIT, + icon: typing.Optional[str] = OMIT, + lifecycle_phase: typing.Optional[CreateFeatureRequestBodyLifecyclePhase] = OMIT, + maintainer_id: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CountAudienceUsersResponse]: + ) -> HttpResponse[CreateFeatureResponse]: """ Parameters ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] + description : str - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] + feature_type : CreateFeatureRequestBodyFeatureType - limit : typing.Optional[int] - Page limit (default 100) + name : str - offset : typing.Optional[int] - Page offset (default 0) + event_subtype : typing.Optional[str] - q : typing.Optional[str] + flag : typing.Optional[CreateOrUpdateFlagRequestBody] + + icon : typing.Optional[str] + + lifecycle_phase : typing.Optional[CreateFeatureRequestBodyLifecyclePhase] + + maintainer_id : typing.Optional[str] + + plural_name : typing.Optional[str] + + singular_name : typing.Optional[str] + + trait_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CountAudienceUsersResponse] + HttpResponse[CreateFeatureResponse] Created """ _response = self._client_wrapper.httpx_client.request( - "audience/count-users", + "features", method="POST", 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", + "description": description, + "event_subtype": event_subtype, + "feature_type": feature_type, + "flag": convert_and_respect_annotation_metadata( + object_=flag, annotation=CreateOrUpdateFlagRequestBody, direction="write" ), - "limit": limit, - "offset": offset, - "q": q, + "icon": icon, + "lifecycle_phase": lifecycle_phase, + "maintainer_id": maintainer_id, + "name": name, + "plural_name": plural_name, + "singular_name": singular_name, + "trait_id": trait_id, }, headers={ "content-type": "application/json", @@ -243,9 +258,9 @@ def count_audience_users( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountAudienceUsersResponse, + CreateFeatureResponse, parse_obj_as( - type_=CountAudienceUsersResponse, # type: ignore + type_=CreateFeatureResponse, # type: ignore object_=_response.json(), ), ) @@ -314,84 +329,38 @@ def count_audience_users( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def list_audience_companies( - self, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ListAudienceCompaniesResponse]: + def get_feature( + self, feature_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetFeatureResponse]: """ Parameters ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) - - q : typing.Optional[str] + feature_id : str + feature_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[ListAudienceCompaniesResponse] + HttpResponse[GetFeatureResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "audience/get-companies", - method="POST", - 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", - ), - "limit": limit, - "offset": offset, - "q": q, - }, - headers={ - "content-type": "application/json", - }, + f"features/{jsonable_encoder(feature_id)}", + method="GET", request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListAudienceCompaniesResponse, + GetFeatureResponse, parse_obj_as( - type_=ListAudienceCompaniesResponse, # type: ignore + type_=GetFeatureResponse, # 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), @@ -445,1053 +414,76 @@ def list_audience_companies( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def list_audience_users( + def update_feature( self, + feature_id: str, *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + event_subtype: typing.Optional[str] = OMIT, + feature_type: typing.Optional[UpdateFeatureRequestBodyFeatureType] = OMIT, + flag: typing.Optional[CreateOrUpdateFlagRequestBody] = OMIT, + icon: typing.Optional[str] = OMIT, + lifecycle_phase: typing.Optional[UpdateFeatureRequestBodyLifecyclePhase] = OMIT, + maintainer_id: typing.Optional[str] = OMIT, + name: typing.Optional[str] = OMIT, + plural_name: typing.Optional[str] = OMIT, + singular_name: typing.Optional[str] = OMIT, + trait_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ListAudienceUsersResponse]: + ) -> HttpResponse[UpdateFeatureResponse]: """ Parameters ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] + feature_id : str + feature_id - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] + description : typing.Optional[str] - limit : typing.Optional[int] - Page limit (default 100) + event_subtype : typing.Optional[str] - offset : typing.Optional[int] - Page offset (default 0) + feature_type : typing.Optional[UpdateFeatureRequestBodyFeatureType] - q : typing.Optional[str] + flag : typing.Optional[CreateOrUpdateFlagRequestBody] - request_options : typing.Optional[RequestOptions] - Request-specific configuration. + icon : typing.Optional[str] - Returns - ------- - HttpResponse[ListAudienceUsersResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - "audience/get-users", - method="POST", - 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", - ), - "limit": limit, - "offset": offset, - "q": q, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - ListAudienceUsersResponse, - parse_obj_as( - type_=ListAudienceUsersResponse, # 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_features( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - 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, - ) -> HttpResponse[ListFeaturesResponse]: - """ - Parameters - ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - q : typing.Optional[str] - Search by feature name or ID - - without_company_override_for : typing.Optional[str] - Filter out features that already have a company override for the specified company ID - - 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) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[ListFeaturesResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - "features", - method="GET", - params={ - "ids": ids, - "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, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - ListFeaturesResponse, - parse_obj_as( - type_=ListFeaturesResponse, # 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_feature( - self, - *, - description: str, - feature_type: CreateFeatureRequestBodyFeatureType, - name: str, - event_subtype: typing.Optional[str] = OMIT, - flag: typing.Optional[CreateOrUpdateFlagRequestBody] = OMIT, - icon: typing.Optional[str] = OMIT, - lifecycle_phase: typing.Optional[CreateFeatureRequestBodyLifecyclePhase] = OMIT, - maintainer_id: typing.Optional[str] = OMIT, - plural_name: typing.Optional[str] = OMIT, - singular_name: typing.Optional[str] = OMIT, - trait_id: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CreateFeatureResponse]: - """ - Parameters - ---------- - description : str - - feature_type : CreateFeatureRequestBodyFeatureType - - name : str - - event_subtype : typing.Optional[str] - - flag : typing.Optional[CreateOrUpdateFlagRequestBody] - - icon : typing.Optional[str] - - lifecycle_phase : typing.Optional[CreateFeatureRequestBodyLifecyclePhase] + lifecycle_phase : typing.Optional[UpdateFeatureRequestBodyLifecyclePhase] maintainer_id : typing.Optional[str] + name : typing.Optional[str] + plural_name : typing.Optional[str] singular_name : typing.Optional[str] - trait_id : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[CreateFeatureResponse] - Created - """ - _response = self._client_wrapper.httpx_client.request( - "features", - method="POST", - json={ - "description": description, - "event_subtype": event_subtype, - "feature_type": feature_type, - "flag": convert_and_respect_annotation_metadata( - object_=flag, annotation=CreateOrUpdateFlagRequestBody, direction="write" - ), - "icon": icon, - "lifecycle_phase": lifecycle_phase, - "maintainer_id": maintainer_id, - "name": name, - "plural_name": plural_name, - "singular_name": singular_name, - "trait_id": trait_id, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - CreateFeatureResponse, - parse_obj_as( - type_=CreateFeatureResponse, # 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_feature( - self, feature_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[GetFeatureResponse]: - """ - Parameters - ---------- - feature_id : str - feature_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[GetFeatureResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - f"features/{jsonable_encoder(feature_id)}", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - GetFeatureResponse, - parse_obj_as( - type_=GetFeatureResponse, # 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_feature( - self, - feature_id: str, - *, - description: typing.Optional[str] = OMIT, - event_subtype: typing.Optional[str] = OMIT, - feature_type: typing.Optional[UpdateFeatureRequestBodyFeatureType] = OMIT, - flag: typing.Optional[CreateOrUpdateFlagRequestBody] = OMIT, - icon: typing.Optional[str] = OMIT, - lifecycle_phase: typing.Optional[UpdateFeatureRequestBodyLifecyclePhase] = OMIT, - maintainer_id: typing.Optional[str] = OMIT, - name: typing.Optional[str] = OMIT, - plural_name: typing.Optional[str] = OMIT, - singular_name: typing.Optional[str] = OMIT, - trait_id: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[UpdateFeatureResponse]: - """ - Parameters - ---------- - feature_id : str - feature_id - - description : typing.Optional[str] - - event_subtype : typing.Optional[str] - - feature_type : typing.Optional[UpdateFeatureRequestBodyFeatureType] - - flag : typing.Optional[CreateOrUpdateFlagRequestBody] - - icon : typing.Optional[str] - - lifecycle_phase : typing.Optional[UpdateFeatureRequestBodyLifecyclePhase] - - maintainer_id : typing.Optional[str] - - name : typing.Optional[str] - - plural_name : typing.Optional[str] - - singular_name : typing.Optional[str] - - trait_id : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[UpdateFeatureResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - f"features/{jsonable_encoder(feature_id)}", - method="PUT", - json={ - "description": description, - "event_subtype": event_subtype, - "feature_type": feature_type, - "flag": convert_and_respect_annotation_metadata( - object_=flag, annotation=CreateOrUpdateFlagRequestBody, direction="write" - ), - "icon": icon, - "lifecycle_phase": lifecycle_phase, - "maintainer_id": maintainer_id, - "name": name, - "plural_name": plural_name, - "singular_name": singular_name, - "trait_id": trait_id, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - UpdateFeatureResponse, - parse_obj_as( - type_=UpdateFeatureResponse, # 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_feature( - self, feature_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[DeleteFeatureResponse]: - """ - Parameters - ---------- - feature_id : str - feature_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[DeleteFeatureResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - f"features/{jsonable_encoder(feature_id)}", - method="DELETE", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - DeleteFeatureResponse, - parse_obj_as( - type_=DeleteFeatureResponse, # 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_features( - self, - *, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - 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, - ) -> HttpResponse[CountFeaturesResponse]: - """ - Parameters - ---------- - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - q : typing.Optional[str] - Search by feature name or ID - - without_company_override_for : typing.Optional[str] - Filter out features that already have a company override for the specified company ID - - 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) - - offset : typing.Optional[int] - Page offset (default 0) - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[CountFeaturesResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - "features/count", - method="GET", - params={ - "ids": ids, - "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, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - CountFeaturesResponse, - parse_obj_as( - type_=CountFeaturesResponse, # 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_flags( - self, - *, - feature_id: typing.Optional[str] = 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, - ) -> HttpResponse[ListFlagsResponse]: - """ - Parameters - ---------- - feature_id : typing.Optional[str] - - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - q : typing.Optional[str] - Search by flag name, key, or 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[ListFlagsResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - "flags", - method="GET", - params={ - "feature_id": feature_id, - "ids": ids, - "q": q, - "limit": limit, - "offset": offset, - }, - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - ListFlagsResponse, - parse_obj_as( - type_=ListFlagsResponse, # 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_flag( - self, - *, - default_value: bool, - description: str, - key: str, - name: str, - feature_id: typing.Optional[str] = OMIT, - maintainer_id: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CreateFlagResponse]: - """ - Parameters - ---------- - default_value : bool - - description : str - - key : str - - name : str - - feature_id : typing.Optional[str] - - maintainer_id : typing.Optional[str] + trait_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CreateFlagResponse] - Created + HttpResponse[UpdateFeatureResponse] + OK """ _response = self._client_wrapper.httpx_client.request( - "flags", - method="POST", + f"features/{jsonable_encoder(feature_id)}", + method="PUT", json={ - "default_value": default_value, "description": description, - "feature_id": feature_id, - "key": key, + "event_subtype": event_subtype, + "feature_type": feature_type, + "flag": convert_and_respect_annotation_metadata( + object_=flag, annotation=CreateOrUpdateFlagRequestBody, direction="write" + ), + "icon": icon, + "lifecycle_phase": lifecycle_phase, "maintainer_id": maintainer_id, "name": name, - "flag_type": "boolean", + "plural_name": plural_name, + "singular_name": singular_name, + "trait_id": trait_id, }, headers={ "content-type": "application/json", @@ -1502,9 +494,9 @@ def create_flag( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CreateFlagResponse, + UpdateFeatureResponse, parse_obj_as( - type_=CreateFlagResponse, # type: ignore + type_=UpdateFeatureResponse, # type: ignore object_=_response.json(), ), ) @@ -1573,38 +565,49 @@ def create_flag( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_flag( - self, flag_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[GetFlagResponse]: + def delete_feature( + self, feature_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeleteFeatureResponse]: """ Parameters ---------- - flag_id : str - flag_id + feature_id : str + feature_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[GetFlagResponse] + HttpResponse[DeleteFeatureResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"flags/{jsonable_encoder(flag_id)}", - method="GET", + f"features/{jsonable_encoder(feature_id)}", + method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetFlagResponse, + DeleteFeatureResponse, parse_obj_as( - type_=GetFlagResponse, # type: ignore + type_=DeleteFeatureResponse, # 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), @@ -1658,68 +661,74 @@ def get_flag( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def update_flag( + def count_features( self, - flag_id: str, *, - default_value: bool, - description: str, - key: str, - name: str, - feature_id: typing.Optional[str] = OMIT, - maintainer_id: typing.Optional[str] = OMIT, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + 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, - ) -> HttpResponse[UpdateFlagResponse]: + ) -> HttpResponse[CountFeaturesResponse]: """ Parameters ---------- - flag_id : str - flag_id + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - default_value : bool + q : typing.Optional[str] + Search by feature name or ID - description : str + without_company_override_for : typing.Optional[str] + Filter out features that already have a company override for the specified company ID - key : str + without_plan_entitlement_for : typing.Optional[str] + Filter out features that already have a plan entitlement for the specified plan ID - name : str + feature_type : typing.Optional[typing.Union[str, typing.Sequence[str]]] + Filter by one or more feature types (boolean, event, trait) - feature_id : typing.Optional[str] + boolean_require_event : typing.Optional[bool] + Only return boolean features if there is an associated event. Automatically includes boolean in the feature types filter. - maintainer_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 ------- - HttpResponse[UpdateFlagResponse] + HttpResponse[CountFeaturesResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"flags/{jsonable_encoder(flag_id)}", - method="PUT", - json={ - "default_value": default_value, - "description": description, - "feature_id": feature_id, - "key": key, - "maintainer_id": maintainer_id, - "name": name, - "flag_type": "boolean", - }, - headers={ - "content-type": "application/json", + "features/count", + method="GET", + params={ + "ids": ids, + "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, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpdateFlagResponse, + CountFeaturesResponse, parse_obj_as( - type_=UpdateFlagResponse, # type: ignore + type_=CountFeaturesResponse, # type: ignore object_=_response.json(), ), ) @@ -1788,34 +797,58 @@ def update_flag( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def delete_flag( - self, flag_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[DeleteFlagResponse]: + def list_flags( + self, + *, + feature_id: typing.Optional[str] = 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, + ) -> HttpResponse[ListFlagsResponse]: """ Parameters ---------- - flag_id : str - flag_id + feature_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + q : typing.Optional[str] + Search by flag name, key, or 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[DeleteFlagResponse] + HttpResponse[ListFlagsResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"flags/{jsonable_encoder(flag_id)}", - method="DELETE", + "flags", + method="GET", + params={ + "feature_id": feature_id, + "ids": ids, + "q": q, + "limit": limit, + "offset": offset, + }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeleteFlagResponse, + ListFlagsResponse, parse_obj_as( - type_=DeleteFlagResponse, # type: ignore + type_=ListFlagsResponse, # type: ignore object_=_response.json(), ), ) @@ -1884,36 +917,51 @@ def delete_flag( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def update_flag_rules( + def create_flag( self, - flag_id: str, *, - rules: typing.Sequence[CreateOrUpdateRuleRequestBody], + default_value: bool, + description: str, + key: str, + name: str, + feature_id: typing.Optional[str] = OMIT, + maintainer_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[UpdateFlagRulesResponse]: + ) -> HttpResponse[CreateFlagResponse]: """ Parameters ---------- - flag_id : str - flag_id + default_value : bool - rules : typing.Sequence[CreateOrUpdateRuleRequestBody] + description : str + + key : str + + name : str + + feature_id : typing.Optional[str] + + maintainer_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[UpdateFlagRulesResponse] - OK + HttpResponse[CreateFlagResponse] + Created """ _response = self._client_wrapper.httpx_client.request( - f"flags/{jsonable_encoder(flag_id)}/rules", - method="PUT", + "flags", + method="POST", json={ - "rules": convert_and_respect_annotation_metadata( - object_=rules, annotation=typing.Sequence[CreateOrUpdateRuleRequestBody], direction="write" - ), + "default_value": default_value, + "description": description, + "feature_id": feature_id, + "key": key, + "maintainer_id": maintainer_id, + "name": name, + "flag_type": "boolean", }, headers={ "content-type": "application/json", @@ -1924,9 +972,9 @@ def update_flag_rules( try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpdateFlagRulesResponse, + CreateFlagResponse, parse_obj_as( - type_=UpdateFlagRulesResponse, # type: ignore + type_=CreateFlagResponse, # type: ignore object_=_response.json(), ), ) @@ -1995,66 +1043,38 @@ def update_flag_rules( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def check_flag( - self, - key: str, - *, - company: typing.Optional[typing.Dict[str, str]] = OMIT, - user: typing.Optional[typing.Dict[str, str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CheckFlagResponse]: + def get_flag( + self, flag_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetFlagResponse]: """ Parameters ---------- - key : str - key - - company : typing.Optional[typing.Dict[str, str]] - - user : typing.Optional[typing.Dict[str, str]] + flag_id : str + flag_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CheckFlagResponse] + HttpResponse[GetFlagResponse] OK - """ - _response = self._client_wrapper.httpx_client.request( - f"flags/{jsonable_encoder(key)}/check", - method="POST", - json={ - "company": company, - "user": user, - }, - headers={ - "content-type": "application/json", - }, + """ + _response = self._client_wrapper.httpx_client.request( + f"flags/{jsonable_encoder(flag_id)}", + method="GET", request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - CheckFlagResponse, + GetFlagResponse, parse_obj_as( - type_=CheckFlagResponse, # type: ignore + type_=GetFlagResponse, # 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), @@ -2108,34 +1128,55 @@ def check_flag( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def check_flags( + def update_flag( self, + flag_id: str, *, - company: typing.Optional[typing.Dict[str, str]] = OMIT, - user: typing.Optional[typing.Dict[str, str]] = OMIT, + default_value: bool, + description: str, + key: str, + name: str, + feature_id: typing.Optional[str] = OMIT, + maintainer_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CheckFlagsResponse]: + ) -> HttpResponse[UpdateFlagResponse]: """ Parameters ---------- - company : typing.Optional[typing.Dict[str, str]] + flag_id : str + flag_id - user : typing.Optional[typing.Dict[str, str]] + default_value : bool + + description : str + + key : str + + name : str + + feature_id : typing.Optional[str] + + maintainer_id : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CheckFlagsResponse] - Created + HttpResponse[UpdateFlagResponse] + OK """ _response = self._client_wrapper.httpx_client.request( - "flags/check", - method="POST", + f"flags/{jsonable_encoder(flag_id)}", + method="PUT", json={ - "company": company, - "user": user, + "default_value": default_value, + "description": description, + "feature_id": feature_id, + "key": key, + "maintainer_id": maintainer_id, + "name": name, + "flag_type": "boolean", }, headers={ "content-type": "application/json", @@ -2146,9 +1187,9 @@ def check_flags( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CheckFlagsResponse, + UpdateFlagResponse, parse_obj_as( - type_=CheckFlagsResponse, # type: ignore + type_=UpdateFlagResponse, # type: ignore object_=_response.json(), ), ) @@ -2217,58 +1258,34 @@ def check_flags( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def count_flags( - self, - *, - feature_id: typing.Optional[str] = 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, - ) -> HttpResponse[CountFlagsResponse]: + def delete_flag( + self, flag_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeleteFlagResponse]: """ Parameters ---------- - feature_id : typing.Optional[str] - - ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - - q : typing.Optional[str] - Search by flag name, key, or ID - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) + flag_id : str + flag_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CountFlagsResponse] + HttpResponse[DeleteFlagResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "flags/count", - method="GET", - params={ - "feature_id": feature_id, - "ids": ids, - "q": q, - "limit": limit, - "offset": offset, - }, + f"flags/{jsonable_encoder(flag_id)}", + method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountFlagsResponse, + DeleteFlagResponse, parse_obj_as( - type_=CountFlagsResponse, # type: ignore + type_=DeleteFlagResponse, # type: ignore object_=_response.json(), ), ) @@ -2337,61 +1354,36 @@ def count_flags( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - -class AsyncRawFeaturesClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._client_wrapper = client_wrapper - - async def count_audience_companies( + def update_flag_rules( self, + flag_id: str, *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, + rules: typing.Sequence[CreateOrUpdateRuleRequestBody], request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[CountAudienceCompaniesResponse]: + ) -> HttpResponse[UpdateFlagRulesResponse]: """ Parameters ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) + flag_id : str + flag_id - q : typing.Optional[str] + rules : typing.Sequence[CreateOrUpdateRuleRequestBody] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[CountAudienceCompaniesResponse] - Created + HttpResponse[UpdateFlagRulesResponse] + OK """ - _response = await self._client_wrapper.httpx_client.request( - "audience/count-companies", - method="POST", + _response = self._client_wrapper.httpx_client.request( + f"flags/{jsonable_encoder(flag_id)}/rules", + 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", + "rules": convert_and_respect_annotation_metadata( + object_=rules, annotation=typing.Sequence[CreateOrUpdateRuleRequestBody], direction="write" ), - "limit": limit, - "offset": offset, - "q": q, }, headers={ "content-type": "application/json", @@ -2402,13 +1394,13 @@ async def count_audience_companies( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountAudienceCompaniesResponse, + UpdateFlagRulesResponse, parse_obj_as( - type_=CountAudienceCompaniesResponse, # type: ignore + type_=UpdateFlagRulesResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) + return HttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -2473,56 +1465,38 @@ async def count_audience_companies( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def count_audience_users( + def check_flag( self, + key: str, *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, + company: typing.Optional[typing.Dict[str, str]] = OMIT, + user: typing.Optional[typing.Dict[str, str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[CountAudienceUsersResponse]: + ) -> HttpResponse[CheckFlagResponse]: """ Parameters ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) + key : str + key - offset : typing.Optional[int] - Page offset (default 0) + company : typing.Optional[typing.Dict[str, str]] - q : typing.Optional[str] + user : typing.Optional[typing.Dict[str, str]] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[CountAudienceUsersResponse] - Created + HttpResponse[CheckFlagResponse] + OK """ - _response = await self._client_wrapper.httpx_client.request( - "audience/count-users", + _response = self._client_wrapper.httpx_client.request( + f"flags/{jsonable_encoder(key)}/check", method="POST", 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", - ), - "limit": limit, - "offset": offset, - "q": q, + "company": company, + "user": user, }, headers={ "content-type": "application/json", @@ -2533,13 +1507,13 @@ async def count_audience_users( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CountAudienceUsersResponse, + CheckFlagResponse, parse_obj_as( - type_=CountAudienceUsersResponse, # type: ignore + type_=CheckFlagResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) + return HttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -2604,56 +1578,34 @@ async def count_audience_users( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def list_audience_companies( + def check_flags( self, *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, + company: typing.Optional[typing.Dict[str, str]] = OMIT, + user: typing.Optional[typing.Dict[str, str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ListAudienceCompaniesResponse]: + ) -> HttpResponse[CheckFlagsResponse]: """ Parameters ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] - - limit : typing.Optional[int] - Page limit (default 100) - - offset : typing.Optional[int] - Page offset (default 0) + company : typing.Optional[typing.Dict[str, str]] - q : typing.Optional[str] + user : typing.Optional[typing.Dict[str, str]] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[ListAudienceCompaniesResponse] - OK + HttpResponse[CheckFlagsResponse] + Created """ - _response = await self._client_wrapper.httpx_client.request( - "audience/get-companies", + _response = self._client_wrapper.httpx_client.request( + "flags/check", method="POST", 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", - ), - "limit": limit, - "offset": offset, - "q": q, + "company": company, + "user": user, }, headers={ "content-type": "application/json", @@ -2664,13 +1616,13 @@ async def list_audience_companies( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListAudienceCompaniesResponse, + CheckFlagsResponse, parse_obj_as( - type_=ListAudienceCompaniesResponse, # type: ignore + type_=CheckFlagsResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) + return HttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -2735,22 +1687,25 @@ async def list_audience_companies( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def list_audience_users( + def count_flags( self, *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - limit: typing.Optional[int] = OMIT, - offset: typing.Optional[int] = OMIT, - q: typing.Optional[str] = OMIT, + feature_id: typing.Optional[str] = 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[ListAudienceUsersResponse]: + ) -> HttpResponse[CountFlagsResponse]: """ Parameters ---------- - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] + feature_id : typing.Optional[str] + + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] + q : typing.Optional[str] + Search by flag name, key, or ID limit : typing.Optional[int] Page limit (default 100) @@ -2758,50 +1713,36 @@ async def list_audience_users( offset : typing.Optional[int] Page offset (default 0) - q : typing.Optional[str] - request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[ListAudienceUsersResponse] + HttpResponse[CountFlagsResponse] OK """ - _response = await self._client_wrapper.httpx_client.request( - "audience/get-users", - method="POST", - 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", - ), + _response = self._client_wrapper.httpx_client.request( + "flags/count", + method="GET", + params={ + "feature_id": feature_id, + "ids": ids, + "q": q, "limit": limit, "offset": offset, - "q": q, - }, - headers={ - "content-type": "application/json", }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListAudienceUsersResponse, + CountFlagsResponse, parse_obj_as( - type_=ListAudienceUsersResponse, # type: ignore + type_=CountFlagsResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) + return HttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -2866,6 +1807,11 @@ async def list_audience_users( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + +class AsyncRawFeaturesClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + async def list_features( self, *, diff --git a/src/schematic/features/types/__init__.py b/src/schematic/features/types/__init__.py index 29fa2a8..9dd4294 100644 --- a/src/schematic/features/types/__init__.py +++ b/src/schematic/features/types/__init__.py @@ -4,8 +4,6 @@ from .check_flag_response import CheckFlagResponse from .check_flags_response import CheckFlagsResponse -from .count_audience_companies_response import CountAudienceCompaniesResponse -from .count_audience_users_response import CountAudienceUsersResponse from .count_features_params import CountFeaturesParams from .count_features_response import CountFeaturesResponse from .count_flags_params import CountFlagsParams @@ -18,8 +16,6 @@ from .delete_flag_response import DeleteFlagResponse from .get_feature_response import GetFeatureResponse from .get_flag_response import GetFlagResponse -from .list_audience_companies_response import ListAudienceCompaniesResponse -from .list_audience_users_response import ListAudienceUsersResponse from .list_features_params import ListFeaturesParams from .list_features_response import ListFeaturesResponse from .list_flags_params import ListFlagsParams @@ -33,8 +29,6 @@ __all__ = [ "CheckFlagResponse", "CheckFlagsResponse", - "CountAudienceCompaniesResponse", - "CountAudienceUsersResponse", "CountFeaturesParams", "CountFeaturesResponse", "CountFlagsParams", @@ -47,8 +41,6 @@ "DeleteFlagResponse", "GetFeatureResponse", "GetFlagResponse", - "ListAudienceCompaniesResponse", - "ListAudienceUsersResponse", "ListFeaturesParams", "ListFeaturesResponse", "ListFlagsParams", diff --git a/src/schematic/features/types/count_audience_users_response.py b/src/schematic/features/types/count_audience_users_response.py deleted file mode 100644 index fbe5902..0000000 --- a/src/schematic/features/types/count_audience_users_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# 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 - - -class CountAudienceUsersResponse(UniversalBaseModel): - data: CountResponse - 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/features/types/list_audience_companies_response.py b/src/schematic/features/types/list_audience_companies_response.py deleted file mode 100644 index dcda077..0000000 --- a/src/schematic/features/types/list_audience_companies_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# 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_detail_response_data import CompanyDetailResponseData - - -class ListAudienceCompaniesResponse(UniversalBaseModel): - data: typing.List[CompanyDetailResponseData] - 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/plangroups/client.py b/src/schematic/plangroups/client.py index 908f855..6946c44 100644 --- a/src/schematic/plangroups/client.py +++ b/src/schematic/plangroups/client.py @@ -75,7 +75,6 @@ def create_plan_group( 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, fallback_plan_id: typing.Optional[str] = OMIT, initial_plan_id: typing.Optional[str] = OMIT, initial_plan_price_id: typing.Optional[str] = OMIT, @@ -121,8 +120,6 @@ def create_plan_group( custom_plan_id : typing.Optional[str] - default_plan_id : typing.Optional[str] - fallback_plan_id : typing.Optional[str] initial_plan_id : typing.Optional[str] @@ -197,7 +194,6 @@ def create_plan_group( add_on_compatibilities=add_on_compatibilities, custom_plan_config=custom_plan_config, custom_plan_id=custom_plan_id, - default_plan_id=default_plan_id, fallback_plan_id=fallback_plan_id, initial_plan_id=initial_plan_id, initial_plan_price_id=initial_plan_price_id, @@ -229,7 +225,6 @@ def update_plan_group( 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, fallback_plan_id: typing.Optional[str] = OMIT, initial_plan_id: typing.Optional[str] = OMIT, initial_plan_price_id: typing.Optional[str] = OMIT, @@ -278,8 +273,6 @@ def update_plan_group( custom_plan_id : typing.Optional[str] - default_plan_id : typing.Optional[str] - fallback_plan_id : typing.Optional[str] initial_plan_id : typing.Optional[str] @@ -356,7 +349,6 @@ def update_plan_group( add_on_compatibilities=add_on_compatibilities, custom_plan_config=custom_plan_config, custom_plan_id=custom_plan_id, - default_plan_id=default_plan_id, fallback_plan_id=fallback_plan_id, initial_plan_id=initial_plan_id, initial_plan_price_id=initial_plan_price_id, @@ -435,7 +427,6 @@ async def create_plan_group( 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, fallback_plan_id: typing.Optional[str] = OMIT, initial_plan_id: typing.Optional[str] = OMIT, initial_plan_price_id: typing.Optional[str] = OMIT, @@ -481,8 +472,6 @@ async def create_plan_group( custom_plan_id : typing.Optional[str] - default_plan_id : typing.Optional[str] - fallback_plan_id : typing.Optional[str] initial_plan_id : typing.Optional[str] @@ -565,7 +554,6 @@ async def main() -> None: add_on_compatibilities=add_on_compatibilities, custom_plan_config=custom_plan_config, custom_plan_id=custom_plan_id, - default_plan_id=default_plan_id, fallback_plan_id=fallback_plan_id, initial_plan_id=initial_plan_id, initial_plan_price_id=initial_plan_price_id, @@ -597,7 +585,6 @@ async def update_plan_group( 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, fallback_plan_id: typing.Optional[str] = OMIT, initial_plan_id: typing.Optional[str] = OMIT, initial_plan_price_id: typing.Optional[str] = OMIT, @@ -646,8 +633,6 @@ async def update_plan_group( custom_plan_id : typing.Optional[str] - default_plan_id : typing.Optional[str] - fallback_plan_id : typing.Optional[str] initial_plan_id : typing.Optional[str] @@ -732,7 +717,6 @@ async def main() -> None: add_on_compatibilities=add_on_compatibilities, custom_plan_config=custom_plan_config, custom_plan_id=custom_plan_id, - default_plan_id=default_plan_id, fallback_plan_id=fallback_plan_id, initial_plan_id=initial_plan_id, initial_plan_price_id=initial_plan_price_id, diff --git a/src/schematic/plangroups/raw_client.py b/src/schematic/plangroups/raw_client.py index 41ab95f..daa8cd9 100644 --- a/src/schematic/plangroups/raw_client.py +++ b/src/schematic/plangroups/raw_client.py @@ -133,7 +133,6 @@ def create_plan_group( 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, fallback_plan_id: typing.Optional[str] = OMIT, initial_plan_id: typing.Optional[str] = OMIT, initial_plan_price_id: typing.Optional[str] = OMIT, @@ -179,8 +178,6 @@ def create_plan_group( custom_plan_id : typing.Optional[str] - default_plan_id : typing.Optional[str] - fallback_plan_id : typing.Optional[str] initial_plan_id : typing.Optional[str] @@ -218,7 +215,6 @@ def create_plan_group( object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" ), "custom_plan_id": custom_plan_id, - "default_plan_id": default_plan_id, "enable_tax_collection": enable_tax_collection, "fallback_plan_id": fallback_plan_id, "initial_plan_id": initial_plan_id, @@ -342,7 +338,6 @@ def update_plan_group( 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, fallback_plan_id: typing.Optional[str] = OMIT, initial_plan_id: typing.Optional[str] = OMIT, initial_plan_price_id: typing.Optional[str] = OMIT, @@ -391,8 +386,6 @@ def update_plan_group( custom_plan_id : typing.Optional[str] - default_plan_id : typing.Optional[str] - fallback_plan_id : typing.Optional[str] initial_plan_id : typing.Optional[str] @@ -430,7 +423,6 @@ def update_plan_group( object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" ), "custom_plan_id": custom_plan_id, - "default_plan_id": default_plan_id, "enable_tax_collection": enable_tax_collection, "fallback_plan_id": fallback_plan_id, "initial_plan_id": initial_plan_id, @@ -640,7 +632,6 @@ async def create_plan_group( 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, fallback_plan_id: typing.Optional[str] = OMIT, initial_plan_id: typing.Optional[str] = OMIT, initial_plan_price_id: typing.Optional[str] = OMIT, @@ -686,8 +677,6 @@ async def create_plan_group( custom_plan_id : typing.Optional[str] - default_plan_id : typing.Optional[str] - fallback_plan_id : typing.Optional[str] initial_plan_id : typing.Optional[str] @@ -725,7 +714,6 @@ async def create_plan_group( object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" ), "custom_plan_id": custom_plan_id, - "default_plan_id": default_plan_id, "enable_tax_collection": enable_tax_collection, "fallback_plan_id": fallback_plan_id, "initial_plan_id": initial_plan_id, @@ -849,7 +837,6 @@ async def update_plan_group( 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, fallback_plan_id: typing.Optional[str] = OMIT, initial_plan_id: typing.Optional[str] = OMIT, initial_plan_price_id: typing.Optional[str] = OMIT, @@ -898,8 +885,6 @@ async def update_plan_group( custom_plan_id : typing.Optional[str] - default_plan_id : typing.Optional[str] - fallback_plan_id : typing.Optional[str] initial_plan_id : typing.Optional[str] @@ -937,7 +922,6 @@ async def update_plan_group( object_=custom_plan_config, annotation=CustomPlanConfig, direction="write" ), "custom_plan_id": custom_plan_id, - "default_plan_id": default_plan_id, "enable_tax_collection": enable_tax_collection, "fallback_plan_id": fallback_plan_id, "initial_plan_id": initial_plan_id, diff --git a/src/schematic/plans/__init__.py b/src/schematic/plans/__init__.py index 3928eda..c57f2e7 100644 --- a/src/schematic/plans/__init__.py +++ b/src/schematic/plans/__init__.py @@ -9,9 +9,7 @@ CountPlansResponseParamsPlanType, CreatePlanRequestBodyPlanType, CreatePlanResponse, - DeleteAudienceResponse, DeletePlanResponse, - GetAudienceResponse, GetPlanResponse, ListPlanIssuesParams, ListPlanIssuesResponse, @@ -19,7 +17,6 @@ ListPlansRequestPlanType, ListPlansResponse, ListPlansResponseParamsPlanType, - UpdateAudienceResponse, UpdateCompanyPlansResponse, UpdatePlanResponse, UpsertBillingProductPlanResponse, @@ -33,9 +30,7 @@ "CountPlansResponseParamsPlanType", "CreatePlanRequestBodyPlanType", "CreatePlanResponse", - "DeleteAudienceResponse", "DeletePlanResponse", - "GetAudienceResponse", "GetPlanResponse", "ListPlanIssuesParams", "ListPlanIssuesResponse", @@ -43,7 +38,6 @@ "ListPlansRequestPlanType", "ListPlansResponse", "ListPlansResponseParamsPlanType", - "UpdateAudienceResponse", "UpdateCompanyPlansResponse", "UpdatePlanResponse", "UpsertBillingProductPlanResponse", diff --git a/src/schematic/plans/client.py b/src/schematic/plans/client.py index 885f100..51cc3c0 100644 --- a/src/schematic/plans/client.py +++ b/src/schematic/plans/client.py @@ -4,21 +4,16 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions -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_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.delete_audience_response import DeleteAudienceResponse from .types.delete_plan_response import DeletePlanResponse -from .types.get_audience_response import GetAudienceResponse from .types.get_plan_response import GetPlanResponse from .types.list_plan_issues_response import ListPlanIssuesResponse 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.upsert_billing_product_plan_response import UpsertBillingProductPlanResponse @@ -86,132 +81,6 @@ def update_company_plans( ) return _response.data - def get_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> GetAudienceResponse: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - GetAudienceResponse - OK - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.get_audience( - plan_audience_id="plan_audience_id", - ) - """ - _response = self._raw_client.get_audience(plan_audience_id, request_options=request_options) - return _response.data - - def update_audience( - self, - plan_audience_id: str, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - request_options: typing.Optional[RequestOptions] = None, - ) -> 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 - ------- - UpdateAudienceResponse - OK - - Examples - -------- - from schematic import ( - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - Schematic, - ) - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.update_audience( - plan_audience_id="plan_audience_id", - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - """ - _response = self._raw_client.update_audience( - plan_audience_id, condition_groups=condition_groups, conditions=conditions, request_options=request_options - ) - return _response.data - - def delete_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> DeleteAudienceResponse: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - DeleteAudienceResponse - OK - - Examples - -------- - from schematic import Schematic - - client = Schematic( - api_key="YOUR_API_KEY", - ) - client.plans.delete_audience( - plan_audience_id="plan_audience_id", - ) - """ - _response = self._raw_client.delete_audience(plan_audience_id, request_options=request_options) - return _response.data - def list_plans( self, *, @@ -766,156 +635,6 @@ async def main() -> None: ) return _response.data - async def get_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> GetAudienceResponse: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - GetAudienceResponse - OK - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.get_audience( - plan_audience_id="plan_audience_id", - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.get_audience(plan_audience_id, request_options=request_options) - return _response.data - - async def update_audience( - self, - plan_audience_id: str, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - request_options: typing.Optional[RequestOptions] = None, - ) -> 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 - ------- - UpdateAudienceResponse - OK - - Examples - -------- - import asyncio - - from schematic import ( - AsyncSchematic, - CreateOrUpdateConditionGroupRequestBody, - CreateOrUpdateConditionRequestBody, - ) - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.update_audience( - plan_audience_id="plan_audience_id", - condition_groups=[ - CreateOrUpdateConditionGroupRequestBody( - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - ], - conditions=[ - CreateOrUpdateConditionRequestBody( - condition_type="company", - operator="eq", - resource_ids=["resource_ids"], - ) - ], - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.update_audience( - plan_audience_id, condition_groups=condition_groups, conditions=conditions, request_options=request_options - ) - return _response.data - - async def delete_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> DeleteAudienceResponse: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - DeleteAudienceResponse - OK - - Examples - -------- - import asyncio - - from schematic import AsyncSchematic - - client = AsyncSchematic( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.plans.delete_audience( - plan_audience_id="plan_audience_id", - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.delete_audience(plan_audience_id, 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 3ec172e..bb77c7f 100644 --- a/src/schematic/plans/raw_client.py +++ b/src/schematic/plans/raw_client.py @@ -9,27 +9,21 @@ 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_or_update_condition_group_request_body import CreateOrUpdateConditionGroupRequestBody -from ..types.create_or_update_condition_request_body import CreateOrUpdateConditionRequestBody 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.delete_audience_response import DeleteAudienceResponse from .types.delete_plan_response import DeletePlanResponse -from .types.get_audience_response import GetAudienceResponse from .types.get_plan_response import GetPlanResponse from .types.list_plan_issues_response import ListPlanIssuesResponse 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.upsert_billing_product_plan_response import UpsertBillingProductPlanResponse @@ -156,723 +150,102 @@ def update_company_plans( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[GetAudienceResponse]: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[GetAudienceResponse] - OK - """ - _response = 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 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_audience( - self, - plan_audience_id: str, - *, - condition_groups: typing.Sequence[CreateOrUpdateConditionGroupRequestBody], - conditions: typing.Sequence[CreateOrUpdateConditionRequestBody], - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[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 - ------- - HttpResponse[UpdateAudienceResponse] - OK - """ - _response = 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 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_audience( - self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[DeleteAudienceResponse]: - """ - Parameters - ---------- - plan_audience_id : str - plan_audience_id - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[DeleteAudienceResponse] - OK - """ - _response = 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 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_plans( - self, - *, - company_id: typing.Optional[str] = None, - for_fallback_plan: typing.Optional[bool] = None, - for_initial_plan: typing.Optional[bool] = None, - for_trial_expiry_plan: typing.Optional[bool] = None, - has_product_id: typing.Optional[bool] = None, - ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, - plan_type: typing.Optional[ListPlansRequestPlanType] = None, - q: typing.Optional[str] = None, - requires_payment_method: typing.Optional[bool] = 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[ListPlansResponse]: - """ - Parameters - ---------- - company_id : typing.Optional[str] - - for_fallback_plan : typing.Optional[bool] - Filter for plans valid as fallback plans (not linked to billing) - - for_initial_plan : typing.Optional[bool] - Filter for plans valid as initial plans (not linked to billing, free, or auto-cancelling trial) - - for_trial_expiry_plan : typing.Optional[bool] - Filter for plans valid as trial expiry plans (not linked to billing or free) - - 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[ListPlansRequestPlanType] - Filter by plan type - - q : typing.Optional[str] - - requires_payment_method : typing.Optional[bool] - Filter for plans that require a payment method (inverse of ForInitialPlan) - - 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[ListPlansResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - "plans", - method="GET", - params={ - "company_id": company_id, - "for_fallback_plan": for_fallback_plan, - "for_initial_plan": for_initial_plan, - "for_trial_expiry_plan": for_trial_expiry_plan, - "has_product_id": has_product_id, - "ids": ids, - "plan_type": plan_type, - "q": q, - "requires_payment_method": requires_payment_method, - "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( - ListPlansResponse, - parse_obj_as( - type_=ListPlansResponse, # 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_plan( + def list_plans( self, *, - description: str, - name: str, - plan_type: CreatePlanRequestBodyPlanType, - icon: typing.Optional[str] = OMIT, + company_id: typing.Optional[str] = None, + for_fallback_plan: typing.Optional[bool] = None, + for_initial_plan: typing.Optional[bool] = None, + for_trial_expiry_plan: typing.Optional[bool] = None, + has_product_id: typing.Optional[bool] = None, + ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + plan_type: typing.Optional[ListPlansRequestPlanType] = None, + q: typing.Optional[str] = None, + requires_payment_method: typing.Optional[bool] = 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[CreatePlanResponse]: + ) -> HttpResponse[ListPlansResponse]: """ Parameters ---------- - description : str - - name : str + company_id : typing.Optional[str] - plan_type : CreatePlanRequestBodyPlanType + for_fallback_plan : typing.Optional[bool] + Filter for plans valid as fallback plans (not linked to billing) - icon : typing.Optional[str] + for_initial_plan : typing.Optional[bool] + Filter for plans valid as initial plans (not linked to billing, free, or auto-cancelling trial) - request_options : typing.Optional[RequestOptions] - Request-specific configuration. + for_trial_expiry_plan : typing.Optional[bool] + Filter for plans valid as trial expiry plans (not linked to billing or free) - Returns - ------- - HttpResponse[CreatePlanResponse] - Created - """ - _response = self._client_wrapper.httpx_client.request( - "plans", - method="POST", - json={ - "description": description, - "icon": icon, - "name": name, - "plan_type": plan_type, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - CreatePlanResponse, - parse_obj_as( - type_=CreatePlanResponse, # 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 - ) + has_product_id : typing.Optional[bool] + Filter out plans that do not have a billing product ID - def get_plan( - self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[GetPlanResponse]: - """ - Parameters - ---------- - plan_id : str - plan_id + ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - request_options : typing.Optional[RequestOptions] - Request-specific configuration. + plan_type : typing.Optional[ListPlansRequestPlanType] + Filter by plan type - Returns - ------- - HttpResponse[GetPlanResponse] - OK - """ - _response = self._client_wrapper.httpx_client.request( - f"plans/{jsonable_encoder(plan_id)}", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - GetPlanResponse, - parse_obj_as( - type_=GetPlanResponse, # 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 - ) + q : typing.Optional[str] - def update_plan( - self, - plan_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 + requires_payment_method : typing.Optional[bool] + Filter for plans that require a payment method (inverse of ForInitialPlan) - name : str + without_entitlement_for : typing.Optional[str] + Filter out plans that already have a plan entitlement for the specified feature ID - description : typing.Optional[str] + without_product_id : typing.Optional[bool] + Filter out plans that have a billing product ID - icon : 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) + + offset : typing.Optional[int] + Page offset (default 0) request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[UpdatePlanResponse] + HttpResponse[ListPlansResponse] 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", + "plans", + method="GET", + params={ + "company_id": company_id, + "for_fallback_plan": for_fallback_plan, + "for_initial_plan": for_initial_plan, + "for_trial_expiry_plan": for_trial_expiry_plan, + "has_product_id": has_product_id, + "ids": ids, + "plan_type": plan_type, + "q": q, + "requires_payment_method": requires_payment_method, + "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, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpdatePlanResponse, + ListPlansResponse, parse_obj_as( - type_=UpdatePlanResponse, # type: ignore + type_=ListPlansResponse, # type: ignore object_=_response.json(), ), ) @@ -941,34 +314,55 @@ def update_plan( 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]: + 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 - plan_id + description : str + + name : str + + plan_type : CreatePlanRequestBodyPlanType + + icon : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[DeletePlanResponse] - OK + HttpResponse[CreatePlanResponse] + Created """ _response = self._client_wrapper.httpx_client.request( - f"plans/{jsonable_encoder(plan_id)}", - method="DELETE", + "plans", + method="POST", + json={ + "description": description, + "icon": icon, + "name": name, + "plan_type": plan_type, + }, + headers={ + "content-type": "application/json", + }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - DeletePlanResponse, + CreatePlanResponse, parse_obj_as( - type_=DeletePlanResponse, # type: ignore + type_=CreatePlanResponse, # type: ignore object_=_response.json(), ), ) @@ -1037,102 +431,38 @@ def delete_plan( 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]: + def get_plan( + self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetPlanResponse]: """ 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] + HttpResponse[GetPlanResponse] 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", - }, + f"plans/{jsonable_encoder(plan_id)}", + method="GET", request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpsertBillingProductPlanResponse, + GetPlanResponse, parse_obj_as( - type_=UpsertBillingProductPlanResponse, # type: ignore + type_=GetPlanResponse, # 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), @@ -1186,102 +516,55 @@ def upsert_billing_product_plan( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def count_plans( + def update_plan( self, + plan_id: str, *, - company_id: typing.Optional[str] = None, - for_fallback_plan: typing.Optional[bool] = None, - for_initial_plan: typing.Optional[bool] = None, - for_trial_expiry_plan: typing.Optional[bool] = 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, - requires_payment_method: typing.Optional[bool] = 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, + name: str, + description: typing.Optional[str] = OMIT, + icon: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CountPlansResponse]: + ) -> HttpResponse[UpdatePlanResponse]: """ Parameters ---------- - company_id : typing.Optional[str] - - for_fallback_plan : typing.Optional[bool] - Filter for plans valid as fallback plans (not linked to billing) - - for_initial_plan : typing.Optional[bool] - Filter for plans valid as initial plans (not linked to billing, free, or auto-cancelling trial) - - for_trial_expiry_plan : typing.Optional[bool] - Filter for plans valid as trial expiry plans (not linked to billing or free) - - 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] - - requires_payment_method : typing.Optional[bool] - Filter for plans that require a payment method (inverse of ForInitialPlan) - - 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 + plan_id : str + plan_id - without_paid_product_id : typing.Optional[bool] - Filter out plans that have a paid billing product ID + name : str - limit : typing.Optional[int] - Page limit (default 100) + description : typing.Optional[str] - offset : typing.Optional[int] - Page offset (default 0) + icon : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[CountPlansResponse] + HttpResponse[UpdatePlanResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "plans/count", - method="GET", - params={ - "company_id": company_id, - "for_fallback_plan": for_fallback_plan, - "for_initial_plan": for_initial_plan, - "for_trial_expiry_plan": for_trial_expiry_plan, - "has_product_id": has_product_id, - "ids": ids, - "plan_type": plan_type, - "q": q, - "requires_payment_method": requires_payment_method, - "without_entitlement_for": without_entitlement_for, - "without_product_id": without_product_id, - "without_paid_product_id": without_paid_product_id, - "limit": limit, - "offset": offset, + 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( - CountPlansResponse, + UpdatePlanResponse, parse_obj_as( - type_=CountPlansResponse, # type: ignore + type_=UpdatePlanResponse, # type: ignore object_=_response.json(), ), ) @@ -1350,36 +633,34 @@ def count_plans( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def list_plan_issues( - self, *, plan_id: str, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[ListPlanIssuesResponse]: + 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[ListPlanIssuesResponse] + HttpResponse[DeletePlanResponse] OK """ _response = self._client_wrapper.httpx_client.request( - "plans/issues", - method="GET", - params={ - "plan_id": plan_id, - }, + f"plans/{jsonable_encoder(plan_id)}", + method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - ListPlanIssuesResponse, + DeletePlanResponse, parse_obj_as( - type_=ListPlanIssuesResponse, # type: ignore + type_=DeletePlanResponse, # type: ignore object_=_response.json(), ), ) @@ -1448,43 +729,74 @@ def list_plan_issues( 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( + def upsert_billing_product_plan( self, - company_plan_id: str, + plan_id: str, *, - add_on_ids: typing.Sequence[str], - base_plan_id: typing.Optional[str] = OMIT, + 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, - ) -> AsyncHttpResponse[UpdateCompanyPlansResponse]: + ) -> HttpResponse[UpsertBillingProductPlanResponse]: """ Parameters ---------- - company_plan_id : str - company_plan_id + plan_id : str + plan_id - add_on_ids : typing.Sequence[str] + charge_type : UpsertBillingProductRequestBodyChargeType - base_plan_id : typing.Optional[str] + 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 ------- - AsyncHttpResponse[UpdateCompanyPlansResponse] + HttpResponse[UpsertBillingProductPlanResponse] OK """ - _response = await self._client_wrapper.httpx_client.request( - f"company-plans/{jsonable_encoder(company_plan_id)}", + _response = self._client_wrapper.httpx_client.request( + f"plans/{jsonable_encoder(plan_id)}/billing_products", method="PUT", json={ - "add_on_ids": add_on_ids, - "base_plan_id": base_plan_id, + "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", @@ -1495,13 +807,13 @@ async def update_company_plans( try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpdateCompanyPlansResponse, + UpsertBillingProductPlanResponse, parse_obj_as( - type_=UpdateCompanyPlansResponse, # type: ignore + type_=UpsertBillingProductPlanResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) + return HttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -1566,38 +878,117 @@ async def update_company_plans( 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]: + def count_plans( + self, + *, + company_id: typing.Optional[str] = None, + for_fallback_plan: typing.Optional[bool] = None, + for_initial_plan: typing.Optional[bool] = None, + for_trial_expiry_plan: typing.Optional[bool] = 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, + requires_payment_method: typing.Optional[bool] = 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 ---------- - plan_audience_id : str - plan_audience_id + company_id : typing.Optional[str] + + for_fallback_plan : typing.Optional[bool] + Filter for plans valid as fallback plans (not linked to billing) + + for_initial_plan : typing.Optional[bool] + Filter for plans valid as initial plans (not linked to billing, free, or auto-cancelling trial) + + for_trial_expiry_plan : typing.Optional[bool] + Filter for plans valid as trial expiry plans (not linked to billing or free) + + 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] + + requires_payment_method : typing.Optional[bool] + Filter for plans that require a payment method (inverse of ForInitialPlan) + + 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 ------- - AsyncHttpResponse[GetAudienceResponse] + HttpResponse[CountPlansResponse] OK """ - _response = await self._client_wrapper.httpx_client.request( - f"plan-audiences/{jsonable_encoder(plan_audience_id)}", + _response = self._client_wrapper.httpx_client.request( + "plans/count", method="GET", + params={ + "company_id": company_id, + "for_fallback_plan": for_fallback_plan, + "for_initial_plan": for_initial_plan, + "for_trial_expiry_plan": for_trial_expiry_plan, + "has_product_id": has_product_id, + "ids": ids, + "plan_type": plan_type, + "q": q, + "requires_payment_method": requires_payment_method, + "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( - GetAudienceResponse, + CountPlansResponse, parse_obj_as( - type_=GetAudienceResponse, # type: ignore + type_=CountPlansResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) + 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), @@ -1651,63 +1042,40 @@ async def get_audience( 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]: + def list_plan_issues( + self, *, plan_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ListPlanIssuesResponse]: """ Parameters ---------- - plan_audience_id : str - plan_audience_id - - condition_groups : typing.Sequence[CreateOrUpdateConditionGroupRequestBody] - - conditions : typing.Sequence[CreateOrUpdateConditionRequestBody] + plan_id : str request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[UpdateAudienceResponse] + HttpResponse[ListPlanIssuesResponse] 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", + _response = self._client_wrapper.httpx_client.request( + "plans/issues", + method="GET", + params={ + "plan_id": plan_id, }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - UpdateAudienceResponse, + ListPlanIssuesResponse, parse_obj_as( - type_=UpdateAudienceResponse, # type: ignore + type_=ListPlanIssuesResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) + return HttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( headers=dict(_response.headers), @@ -1772,34 +1140,56 @@ async def update_audience( 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]: + +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 ---------- - plan_audience_id : str - plan_audience_id + 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[DeleteAudienceResponse] + AsyncHttpResponse[UpdateCompanyPlansResponse] OK """ _response = await self._client_wrapper.httpx_client.request( - f"plan-audiences/{jsonable_encoder(plan_audience_id)}", - method="DELETE", + 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( - DeleteAudienceResponse, + UpdateCompanyPlansResponse, parse_obj_as( - type_=DeleteAudienceResponse, # type: ignore + type_=UpdateCompanyPlansResponse, # type: ignore object_=_response.json(), ), ) diff --git a/src/schematic/plans/types/__init__.py b/src/schematic/plans/types/__init__.py index 2da48bf..6dcd77b 100644 --- a/src/schematic/plans/types/__init__.py +++ b/src/schematic/plans/types/__init__.py @@ -8,9 +8,7 @@ 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 .delete_audience_response import DeleteAudienceResponse from .delete_plan_response import DeletePlanResponse -from .get_audience_response import GetAudienceResponse from .get_plan_response import GetPlanResponse from .list_plan_issues_params import ListPlanIssuesParams from .list_plan_issues_response import ListPlanIssuesResponse @@ -18,7 +16,6 @@ from .list_plans_request_plan_type import ListPlansRequestPlanType from .list_plans_response import ListPlansResponse from .list_plans_response_params_plan_type import ListPlansResponseParamsPlanType -from .update_audience_response import UpdateAudienceResponse from .update_company_plans_response import UpdateCompanyPlansResponse from .update_plan_response import UpdatePlanResponse from .upsert_billing_product_plan_response import UpsertBillingProductPlanResponse @@ -31,9 +28,7 @@ "CountPlansResponseParamsPlanType", "CreatePlanRequestBodyPlanType", "CreatePlanResponse", - "DeleteAudienceResponse", "DeletePlanResponse", - "GetAudienceResponse", "GetPlanResponse", "ListPlanIssuesParams", "ListPlanIssuesResponse", @@ -41,7 +36,6 @@ "ListPlansRequestPlanType", "ListPlansResponse", "ListPlansResponseParamsPlanType", - "UpdateAudienceResponse", "UpdateCompanyPlansResponse", "UpdatePlanResponse", "UpsertBillingProductPlanResponse", diff --git a/src/schematic/plans/types/delete_audience_response.py b/src/schematic/plans/types/delete_audience_response.py deleted file mode 100644 index 017114f..0000000 --- a/src/schematic/plans/types/delete_audience_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# 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 DeleteAudienceResponse(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/plans/types/get_audience_response.py b/src/schematic/plans/types/get_audience_response.py deleted file mode 100644 index 1182fd8..0000000 --- a/src/schematic/plans/types/get_audience_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# 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.plan_audience_detail_response_data import PlanAudienceDetailResponseData - - -class GetAudienceResponse(UniversalBaseModel): - data: PlanAudienceDetailResponseData - 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/plans/types/update_audience_response.py b/src/schematic/plans/types/update_audience_response.py deleted file mode 100644 index 47ea5b6..0000000 --- a/src/schematic/plans/types/update_audience_response.py +++ /dev/null @@ -1,24 +0,0 @@ -# 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.plan_audience_detail_response_data import PlanAudienceDetailResponseData - - -class UpdateAudienceResponse(UniversalBaseModel): - data: PlanAudienceDetailResponseData - 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/raw_base_client.py b/src/schematic/raw_base_client.py index 4497c51..d0bc7f5 100644 --- a/src/schematic/raw_base_client.py +++ b/src/schematic/raw_base_client.py @@ -6,6 +6,7 @@ from .core.api_error import ApiError from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .core.http_response import AsyncHttpResponse, HttpResponse +from .core.jsonable_encoder import jsonable_encoder from .core.request_options import RequestOptions @@ -13,154 +14,14 @@ class RawBaseSchematic: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[None] - """ - _response = self._client_wrapper.httpx_client.request( - "billing/credits/:credit_id", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return HttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - def update_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[None] - """ - _response = self._client_wrapper.httpx_client.request( - "billing/credits/:credit_id", - method="PUT", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return HttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - def delete_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[None] - """ - _response = self._client_wrapper.httpx_client.request( - "billing/credits/:credit_id", - method="DELETE", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return HttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - def get_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[None] - """ - _response = self._client_wrapper.httpx_client.request( - "billing/credits/bundles/:bundle_id", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return HttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - def purchase_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[None] - """ - _response = self._client_wrapper.httpx_client.request( - "billing/credits/bundles/:bundle_id", - method="POST", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return HttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - def update_credit_bundle(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]: + def put_plan_audiences_plan_audience_id( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[None]: """ Parameters ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[None] - """ - _response = self._client_wrapper.httpx_client.request( - "billing/credits/bundles/:bundle_id", - method="PUT", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return HttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + plan_audience_id : str - def zero_out_credit_grant(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]: - """ - Parameters - ---------- request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -169,7 +30,7 @@ def zero_out_credit_grant(self, *, request_options: typing.Optional[RequestOptio HttpResponse[None] """ _response = self._client_wrapper.httpx_client.request( - "billing/credits/grants/:grant_id/zero-out", + f"plan-audiences/{jsonable_encoder(plan_audience_id)}", method="PUT", request_options=request_options, ) @@ -181,12 +42,14 @@ def zero_out_credit_grant(self, *, request_options: typing.Optional[RequestOptio raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - def delete_plan_credit_grant( - self, *, request_options: typing.Optional[RequestOptions] = None + def delete_plan_audiences_plan_audience_id( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[None]: """ Parameters ---------- + plan_audience_id : str + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -195,7 +58,7 @@ def delete_plan_credit_grant( HttpResponse[None] """ _response = self._client_wrapper.httpx_client.request( - "billing/credits/plan-grants/:plan_grant_id", + f"plan-audiences/{jsonable_encoder(plan_audience_id)}", method="DELETE", request_options=request_options, ) @@ -212,88 +75,14 @@ class AsyncRawBaseSchematic: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get_credit(self, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[None] - """ - _response = await self._client_wrapper.httpx_client.request( - "billing/credits/:credit_id", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return AsyncHttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - async def update_credit( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[None] - """ - _response = await self._client_wrapper.httpx_client.request( - "billing/credits/:credit_id", - method="PUT", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return AsyncHttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - async def delete_credit( - self, *, request_options: typing.Optional[RequestOptions] = None + async def put_plan_audiences_plan_audience_id( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[None]: """ Parameters ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. + plan_audience_id : str - Returns - ------- - AsyncHttpResponse[None] - """ - _response = await self._client_wrapper.httpx_client.request( - "billing/credits/:credit_id", - method="DELETE", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return AsyncHttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - async def get_credit_bundle( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[None]: - """ - Parameters - ---------- request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -302,59 +91,7 @@ async def get_credit_bundle( AsyncHttpResponse[None] """ _response = await self._client_wrapper.httpx_client.request( - "billing/credits/bundles/:bundle_id", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return AsyncHttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - async def purchase_credit_bundle( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[None] - """ - _response = await self._client_wrapper.httpx_client.request( - "billing/credits/bundles/:bundle_id", - method="POST", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return AsyncHttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - - async def update_credit_bundle( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[None]: - """ - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[None] - """ - _response = await self._client_wrapper.httpx_client.request( - "billing/credits/bundles/:bundle_id", + f"plan-audiences/{jsonable_encoder(plan_audience_id)}", method="PUT", request_options=request_options, ) @@ -366,38 +103,14 @@ async def update_credit_bundle( raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - async def zero_out_credit_grant( - self, *, request_options: typing.Optional[RequestOptions] = None + async def delete_plan_audiences_plan_audience_id( + self, plan_audience_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[None]: """ Parameters ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[None] - """ - _response = await self._client_wrapper.httpx_client.request( - "billing/credits/grants/:grant_id/zero-out", - method="PUT", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return AsyncHttpResponse(response=_response, data=None) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + plan_audience_id : str - async def delete_plan_credit_grant( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[None]: - """ - Parameters - ---------- request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -406,7 +119,7 @@ async def delete_plan_credit_grant( AsyncHttpResponse[None] """ _response = await self._client_wrapper.httpx_client.request( - "billing/credits/plan-grants/:plan_grant_id", + f"plan-audiences/{jsonable_encoder(plan_audience_id)}", method="DELETE", request_options=request_options, ) diff --git a/src/schematic/types/__init__.py b/src/schematic/types/__init__.py index 7144cf8..86d8efa 100644 --- a/src/schematic/types/__init__.py +++ b/src/schematic/types/__init__.py @@ -7,7 +7,6 @@ from .api_key_request_list_response_data import ApiKeyRequestListResponseData from .api_key_request_response_data import ApiKeyRequestResponseData 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 @@ -146,11 +145,13 @@ from .manage_plan_response_response_data import ManagePlanResponseResponseData from .meter_request_body import MeterRequestBody from .ordered_plans_in_group import OrderedPlansInGroup -from .pagination_filter import PaginationFilter from .payment_method_request_body import PaymentMethodRequestBody from .payment_method_response_data import PaymentMethodResponseData -from .plan_audience_detail_response_data import PlanAudienceDetailResponseData -from .plan_audience_response_data import PlanAudienceResponseData +from .plan_change_response_data import PlanChangeResponseData +from .plan_change_response_data_action import PlanChangeResponseDataAction +from .plan_change_response_data_actor_type import PlanChangeResponseDataActorType +from .plan_change_response_data_base_plan_action import PlanChangeResponseDataBasePlanAction +from .plan_change_response_data_subscription_change_action import PlanChangeResponseDataSubscriptionChangeAction from .plan_credit_grant_view import PlanCreditGrantView from .plan_detail_response_data import PlanDetailResponseData from .plan_entitlement_response_data import PlanEntitlementResponseData @@ -163,6 +164,7 @@ from .plan_issue_response_data import PlanIssueResponseData from .plan_response_data import PlanResponseData from .plan_selection import PlanSelection +from .plan_snapshot_view import PlanSnapshotView from .plan_trait_response_data import PlanTraitResponseData from .preview_object import PreviewObject from .preview_object_response_data import PreviewObjectResponseData @@ -182,6 +184,7 @@ from .rules_detail_response_data import RulesDetailResponseData from .segment_status_resp import SegmentStatusResp from .stripe_embed_info import StripeEmbedInfo +from .subscription_trait_update import SubscriptionTraitUpdate from .temporary_access_token_response_data import TemporaryAccessTokenResponseData from .trait_definition import TraitDefinition from .update_add_on_request_body import UpdateAddOnRequestBody @@ -212,7 +215,6 @@ "ApiKeyRequestListResponseData", "ApiKeyRequestResponseData", "ApiKeyResponseData", - "AudienceRequestBody", "BillingCouponResponseData", "BillingCreditBundleResponseData", "BillingCreditBundleView", @@ -349,11 +351,13 @@ "ManagePlanResponseResponseData", "MeterRequestBody", "OrderedPlansInGroup", - "PaginationFilter", "PaymentMethodRequestBody", "PaymentMethodResponseData", - "PlanAudienceDetailResponseData", - "PlanAudienceResponseData", + "PlanChangeResponseData", + "PlanChangeResponseDataAction", + "PlanChangeResponseDataActorType", + "PlanChangeResponseDataBasePlanAction", + "PlanChangeResponseDataSubscriptionChangeAction", "PlanCreditGrantView", "PlanDetailResponseData", "PlanEntitlementResponseData", @@ -366,6 +370,7 @@ "PlanIssueResponseData", "PlanResponseData", "PlanSelection", + "PlanSnapshotView", "PlanTraitResponseData", "PreviewObject", "PreviewObjectResponseData", @@ -385,6 +390,7 @@ "RulesDetailResponseData", "SegmentStatusResp", "StripeEmbedInfo", + "SubscriptionTraitUpdate", "TemporaryAccessTokenResponseData", "TraitDefinition", "UpdateAddOnRequestBody", diff --git a/src/schematic/types/create_or_update_condition_group_request_body.py b/src/schematic/types/create_or_update_condition_group_request_body.py index 9b4c02f..0f30ea7 100644 --- a/src/schematic/types/create_or_update_condition_group_request_body.py +++ b/src/schematic/types/create_or_update_condition_group_request_body.py @@ -11,7 +11,6 @@ class CreateOrUpdateConditionGroupRequestBody(UniversalBaseModel): conditions: typing.List[CreateOrUpdateConditionRequestBody] flag_id: typing.Optional[str] = None id: typing.Optional[str] = None - plan_id: typing.Optional[str] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/schematic/types/create_or_update_rule_request_body_rule_type.py b/src/schematic/types/create_or_update_rule_request_body_rule_type.py index 9494daf..5482671 100644 --- a/src/schematic/types/create_or_update_rule_request_body_rule_type.py +++ b/src/schematic/types/create_or_update_rule_request_body_rule_type.py @@ -3,6 +3,5 @@ import typing CreateOrUpdateRuleRequestBodyRuleType = typing.Union[ - typing.Literal["global_override", "company_override", "plan_entitlement", "standard", "default", "plan_audience"], - typing.Any, + typing.Literal["global_override", "company_override", "plan_entitlement", "standard", "default"], typing.Any ] diff --git a/src/schematic/types/plan_audience_detail_response_data.py b/src/schematic/types/plan_audience_detail_response_data.py deleted file mode 100644 index 5e14370..0000000 --- a/src/schematic/types/plan_audience_detail_response_data.py +++ /dev/null @@ -1,33 +0,0 @@ -# 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 .rule_condition_detail_response_data import RuleConditionDetailResponseData -from .rule_condition_group_detail_response_data import RuleConditionGroupDetailResponseData - - -class PlanAudienceDetailResponseData(UniversalBaseModel): - condition_groups: typing.List[RuleConditionGroupDetailResponseData] - conditions: typing.List[RuleConditionDetailResponseData] - created_at: dt.datetime - environment_id: str - flag_id: typing.Optional[str] = None - id: str - name: str - plan_id: typing.Optional[str] = None - priority: int - rule_type: str - updated_at: dt.datetime - value: bool - - 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_change_response_data.py b/src/schematic/types/plan_change_response_data.py new file mode 100644 index 0000000..7b0cbb3 --- /dev/null +++ b/src/schematic/types/plan_change_response_data.py @@ -0,0 +1,62 @@ +# 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 .api_key_request_list_response_data import ApiKeyRequestListResponseData +from .api_key_response_data import ApiKeyResponseData +from .company_response_data import CompanyResponseData +from .plan_change_response_data_action import PlanChangeResponseDataAction +from .plan_change_response_data_actor_type import PlanChangeResponseDataActorType +from .plan_change_response_data_base_plan_action import PlanChangeResponseDataBasePlanAction +from .plan_change_response_data_subscription_change_action import PlanChangeResponseDataSubscriptionChangeAction +from .plan_snapshot_view import PlanSnapshotView +from .subscription_trait_update import SubscriptionTraitUpdate + + +class PlanChangeResponseData(UniversalBaseModel): + action: PlanChangeResponseDataAction + actor_type: PlanChangeResponseDataActorType + add_ons_added: typing.List[PlanSnapshotView] + add_ons_removed: typing.List[PlanSnapshotView] + api_key: typing.Optional[ApiKeyResponseData] = None + api_key_request: typing.Optional[ApiKeyRequestListResponseData] = None + base_plan: typing.Optional[PlanSnapshotView] = None + base_plan_action: typing.Optional[PlanChangeResponseDataBasePlanAction] = pydantic.Field(default=None) + """ + Any special behavior that affected the assignment of the base plan during this change. + """ + + company: typing.Optional[CompanyResponseData] = None + company_id: str + created_at: dt.datetime + environment_id: str + id: str + previous_base_plan: typing.Optional[PlanSnapshotView] = None + request_id: typing.Optional[str] = None + subscription_change_action: typing.Optional[PlanChangeResponseDataSubscriptionChangeAction] = pydantic.Field( + default=None + ) + """ + If a subscription was changed as a part of this plan change, indicates the type of change that was made. + """ + + traits_updated: typing.List[SubscriptionTraitUpdate] = pydantic.Field() + """ + Any traits were updated as part of this plan change (via pay-in-advance entitlements). + """ + + updated_at: dt.datetime + user_id: typing.Optional[str] = None + user_name: 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/plan_change_response_data_action.py b/src/schematic/types/plan_change_response_data_action.py new file mode 100644 index 0000000..d3df40b --- /dev/null +++ b/src/schematic/types/plan_change_response_data_action.py @@ -0,0 +1,17 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +PlanChangeResponseDataAction = typing.Union[ + typing.Literal[ + "checkout", + "company_upsert", + "fallback_plan", + "manage_plan", + "plan_billing_product_changed", + "plan_deleted", + "quickstart", + "subscription_change", + ], + typing.Any, +] diff --git a/src/schematic/types/plan_change_response_data_actor_type.py b/src/schematic/types/plan_change_response_data_actor_type.py new file mode 100644 index 0000000..0539458 --- /dev/null +++ b/src/schematic/types/plan_change_response_data_actor_type.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +PlanChangeResponseDataActorType = typing.Union[ + typing.Literal["app_user", "api_key", "system", "temporary_access_token"], typing.Any +] diff --git a/src/schematic/types/plan_change_response_data_base_plan_action.py b/src/schematic/types/plan_change_response_data_base_plan_action.py new file mode 100644 index 0000000..68df41c --- /dev/null +++ b/src/schematic/types/plan_change_response_data_base_plan_action.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +PlanChangeResponseDataBasePlanAction = typing.Union[ + typing.Literal["fallback", "initial", "trait", "trial_expiry"], typing.Any +] diff --git a/src/schematic/types/plan_change_response_data_subscription_change_action.py b/src/schematic/types/plan_change_response_data_subscription_change_action.py new file mode 100644 index 0000000..1046419 --- /dev/null +++ b/src/schematic/types/plan_change_response_data_subscription_change_action.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +PlanChangeResponseDataSubscriptionChangeAction = typing.Union[ + typing.Literal["downgrade", "invalid", "subscribe", "unsubscribe", "upgrade", "upgrade_trial"], typing.Any +] diff --git a/src/schematic/types/pagination_filter.py b/src/schematic/types/plan_snapshot_view.py similarity index 64% rename from src/schematic/types/pagination_filter.py rename to src/schematic/types/plan_snapshot_view.py index 13e91af..d6d632f 100644 --- a/src/schematic/types/pagination_filter.py +++ b/src/schematic/types/plan_snapshot_view.py @@ -6,16 +6,12 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -class PaginationFilter(UniversalBaseModel): - limit: typing.Optional[int] = pydantic.Field(default=None) - """ - Page limit (default 100) - """ - - offset: typing.Optional[int] = pydantic.Field(default=None) - """ - Page offset (default 0) - """ +class PlanSnapshotView(UniversalBaseModel): + deleted: bool + description: str + icon: str + id: str + name: str 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/rule_condition_detail_response_data.py b/src/schematic/types/rule_condition_detail_response_data.py index 0506aee..6d61ec7 100644 --- a/src/schematic/types/rule_condition_detail_response_data.py +++ b/src/schematic/types/rule_condition_detail_response_data.py @@ -23,7 +23,6 @@ class RuleConditionDetailResponseData(UniversalBaseModel): metric_period_month_reset: typing.Optional[str] = None metric_value: typing.Optional[int] = None operator: str - plan_id: typing.Optional[str] = None resource_ids: typing.List[str] resources: typing.List[PreviewObjectResponseData] rule_id: str diff --git a/src/schematic/types/rule_condition_group_detail_response_data.py b/src/schematic/types/rule_condition_group_detail_response_data.py index 6eca1ed..e34bf2d 100644 --- a/src/schematic/types/rule_condition_group_detail_response_data.py +++ b/src/schematic/types/rule_condition_group_detail_response_data.py @@ -14,7 +14,6 @@ class RuleConditionGroupDetailResponseData(UniversalBaseModel): environment_id: str flag_id: typing.Optional[str] = None id: str - plan_id: typing.Optional[str] = None rule_id: str updated_at: dt.datetime diff --git a/src/schematic/types/rule_condition_group_response_data.py b/src/schematic/types/rule_condition_group_response_data.py index 6d7721b..2530eb3 100644 --- a/src/schematic/types/rule_condition_group_response_data.py +++ b/src/schematic/types/rule_condition_group_response_data.py @@ -12,7 +12,6 @@ class RuleConditionGroupResponseData(UniversalBaseModel): environment_id: str flag_id: typing.Optional[str] = None id: str - plan_id: typing.Optional[str] = None rule_id: str updated_at: dt.datetime diff --git a/src/schematic/types/rule_condition_response_data.py b/src/schematic/types/rule_condition_response_data.py index b08bee6..f1f0242 100644 --- a/src/schematic/types/rule_condition_response_data.py +++ b/src/schematic/types/rule_condition_response_data.py @@ -20,7 +20,6 @@ class RuleConditionResponseData(UniversalBaseModel): metric_period_month_reset: typing.Optional[str] = None metric_value: typing.Optional[int] = None operator: str - plan_id: typing.Optional[str] = None resource_ids: typing.List[str] rule_id: str trait_entity_type: typing.Optional[str] = None diff --git a/src/schematic/types/rule_detail_response_data.py b/src/schematic/types/rule_detail_response_data.py index 8d77564..7e849be 100644 --- a/src/schematic/types/rule_detail_response_data.py +++ b/src/schematic/types/rule_detail_response_data.py @@ -17,7 +17,6 @@ class RuleDetailResponseData(UniversalBaseModel): flag_id: typing.Optional[str] = None id: str name: str - plan_id: typing.Optional[str] = None priority: int rule_type: str updated_at: dt.datetime diff --git a/src/schematic/types/rule_response_data.py b/src/schematic/types/rule_response_data.py index be9e638..edd3b0d 100644 --- a/src/schematic/types/rule_response_data.py +++ b/src/schematic/types/rule_response_data.py @@ -13,7 +13,6 @@ class RuleResponseData(UniversalBaseModel): flag_id: typing.Optional[str] = None id: str name: str - plan_id: typing.Optional[str] = None priority: int rule_type: str updated_at: dt.datetime diff --git a/src/schematic/types/plan_audience_response_data.py b/src/schematic/types/subscription_trait_update.py similarity index 59% rename from src/schematic/types/plan_audience_response_data.py rename to src/schematic/types/subscription_trait_update.py index 10c0447..0b04297 100644 --- a/src/schematic/types/plan_audience_response_data.py +++ b/src/schematic/types/subscription_trait_update.py @@ -1,23 +1,19 @@ # 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 PlanAudienceResponseData(UniversalBaseModel): - created_at: dt.datetime - environment_id: str - flag_id: typing.Optional[str] = None - id: str - name: str - plan_id: typing.Optional[str] = None - priority: int - rule_type: str - updated_at: dt.datetime - value: bool +class SubscriptionTraitUpdate(UniversalBaseModel): + feature_id: str + hierarchy: typing.List[str] + reason: str + trait_id: str + trait_name: str + trait_type: str + value: str 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/webhooks/types/create_webhook_request_body_request_types_item.py b/src/schematic/webhooks/types/create_webhook_request_body_request_types_item.py index 9302fb7..ebf86a6 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 @@ -36,6 +36,7 @@ "entitlement.tier_limit.reached", "credit.limit.warning", "credit.limit.reached", + "company.plan_change", ], 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 3983ac0..76c47b7 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 @@ -36,6 +36,7 @@ "entitlement.tier_limit.reached", "credit.limit.warning", "credit.limit.reached", + "company.plan_change", ], typing.Any, ]