diff --git a/.fern/metadata.json b/.fern/metadata.json index da44bf6..a752dfe 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -1,5 +1,5 @@ { - "cliVersion": "4.76.1", + "cliVersion": "5.6.0", "generatorName": "fernapi/fern-python-sdk", "generatorVersion": "4.64.1", "generatorConfig": { @@ -23,6 +23,6 @@ } ] }, - "originGitCommit": "5315b1ba06c9c71f00ac501c3e7ea3092701cd7b", + "originGitCommit": "4fd82021eff164a6f2484d4504850c46fe8f4a95", "sdkVersion": "1.2.0" } \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 25e2811..06a44c1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -476,13 +476,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "idna" -version = "3.13" +version = "3.14" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.8" files = [ - {file = "idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3"}, - {file = "idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242"}, + {file = "idna-3.14-py3-none-any.whl", hash = "sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69"}, + {file = "idna-3.14.tar.gz", hash = "sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3"}, ] [package.extras] @@ -745,13 +745,13 @@ files = [ [[package]] name = "packaging" -version = "26.1" +version = "26.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-26.1-py3-none-any.whl", hash = "sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f"}, - {file = "packaging-26.1.tar.gz", hash = "sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de"}, + {file = "packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e"}, + {file = "packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661"}, ] [[package]] diff --git a/reference.md b/reference.md index f87be82..7ff2249 100644 --- a/reference.md +++ b/reference.md @@ -3351,6 +3351,7 @@ client.billing.list_billing_products( price_usage_type="licensed", provider_type="orb", q="q", + recurring_charges_only=True, with_one_time_charges=True, with_prices_only=True, with_zero_price=True, @@ -3421,6 +3422,14 @@ client.billing.list_billing_products(
+**recurring_charges_only:** `typing.Optional[bool]` — Filter to products that have at least one recurring price + +
+
+ +
+
+ **with_one_time_charges:** `typing.Optional[bool]` — Filter products that are one time charges
@@ -3511,6 +3520,7 @@ client.billing.count_billing_products( price_usage_type="licensed", provider_type="orb", q="q", + recurring_charges_only=True, with_one_time_charges=True, with_prices_only=True, with_zero_price=True, @@ -3581,6 +3591,14 @@ client.billing.count_billing_products(
+**recurring_charges_only:** `typing.Optional[bool]` — Filter to products that have at least one recurring price + +
+
+ +
+
+ **with_one_time_charges:** `typing.Optional[bool]` — Filter products that are one time charges
@@ -4394,6 +4412,65 @@ client.credits.soft_delete_billing_credit(
+ +
+ + +
client.credits.list_company_credit_balances(...) -> ListCompanyCreditBalancesResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.credits.list_company_credit_balances( + company_id="company_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**company_id:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -5957,6 +6034,9 @@ client.credits.list_billing_plan_credit_grants( "plan_ids" ], plan_version_id="plan_version_id", + plan_version_ids=[ + "plan_version_ids" + ], limit=1000000, offset=1000000, ) @@ -6015,6 +6095,14 @@ client.credits.list_billing_plan_credit_grants(
+**plan_version_ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]` + +
+
+ +
+
+ **limit:** `typing.Optional[int]` — Page limit (default 100)
@@ -6333,6 +6421,9 @@ client.credits.count_billing_plan_credit_grants( "plan_ids" ], plan_version_id="plan_version_id", + plan_version_ids=[ + "plan_version_ids" + ], limit=1000000, offset=1000000, ) @@ -6391,6 +6482,14 @@ client.credits.count_billing_plan_credit_grants(
+**plan_version_ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]` + +
+
+ +
+
+ **limit:** `typing.Optional[int]` — Page limit (default 100)
@@ -6677,7 +6776,7 @@ client.credits.count_credit_event_ledger(
```python -from schematic import Schematic, UpdateAddOnRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody +from schematic import Schematic, UpdateAddOnRequestBody, UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody from schematic.environment import SchematicEnvironment client = Schematic( @@ -6692,6 +6791,11 @@ client.checkout.internal( price_id="price_id", ) ], + auto_topup_overrides=[ + UpdateAutoTopupOverrideRequestBody( + plan_credit_grant_id="plan_credit_grant_id", + ) + ], company_id="company_id", credit_bundles=[ UpdateCreditBundleRequestBody( @@ -6824,7 +6928,7 @@ client.checkout.get_checkout_data(
```python -from schematic import Schematic, UpdateAddOnRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody +from schematic import Schematic, UpdateAddOnRequestBody, UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody from schematic.environment import SchematicEnvironment client = Schematic( @@ -6839,6 +6943,11 @@ client.checkout.preview_checkout_internal( price_id="price_id", ) ], + auto_topup_overrides=[ + UpdateAutoTopupOverrideRequestBody( + plan_credit_grant_id="plan_credit_grant_id", + ) + ], company_id="company_id", credit_bundles=[ UpdateCreditBundleRequestBody( @@ -13474,6 +13583,7 @@ client = Schematic( client.plans.list_plans( company_id="company_id", + company_scoped_only=True, exclude_company_scoped=True, for_fallback_plan=True, for_initial_plan=True, @@ -13514,6 +13624,14 @@ client.plans.list_plans(
+**company_scoped_only:** `typing.Optional[bool]` — Only return plans that are scoped to a company (custom plans assigned to a company) + +
+
+ +
+
+ **exclude_company_scoped:** `typing.Optional[bool]` — Exclude plans that are scoped to a company (custom plans assigned to a company)
@@ -14046,6 +14164,14 @@ client.plans.upsert_plan_for_billing_product(
+**external_resource_version:** `typing.Optional[str]` + +
+
+ +
+
+ **icon:** `typing.Optional[PlanIcon]`
@@ -14261,6 +14387,7 @@ client = Schematic( client.plans.count_plans( company_id="company_id", + company_scoped_only=True, exclude_company_scoped=True, for_fallback_plan=True, for_initial_plan=True, @@ -14301,6 +14428,14 @@ client.plans.count_plans(
+**company_scoped_only:** `typing.Optional[bool]` — Only return plans that are scoped to a company (custom plans assigned to a company) + +
+
+ +
+
+ **exclude_company_scoped:** `typing.Optional[bool]` — Exclude plans that are scoped to a company (custom plans assigned to a company)
@@ -15501,6 +15636,7 @@ client.events.list_events( "flag_check" ], flag_id="flag_id", + idempotency_key="idempotency_key", user_id="user_id", limit=1000000, offset=1000000, @@ -15552,6 +15688,14 @@ client.events.list_events(
+**idempotency_key:** `typing.Optional[str]` + +
+
+ +
+
+ **user_id:** `typing.Optional[str]`
@@ -15785,6 +15929,7 @@ client.features.list_features( ids=[ "ids" ], + managed_by="orb", plan_version_id="plan_version_id", q="q", without_company_override_for="without_company_override_for", @@ -15831,6 +15976,14 @@ client.features.list_features(
+**managed_by:** `typing.Optional[BillingProviderType]` — Filter for features managed by a billing provider, or by Schematic (no billing provider) + +
+
+ +
+
+ **plan_version_id:** `typing.Optional[str]` — Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used
@@ -16485,6 +16638,7 @@ client.features.count_features( ids=[ "ids" ], + managed_by="orb", plan_version_id="plan_version_id", q="q", without_company_override_for="without_company_override_for", @@ -16531,6 +16685,14 @@ client.features.count_features(
+**managed_by:** `typing.Optional[BillingProviderType]` — Filter for features managed by a billing provider, or by Schematic (no billing provider) + +
+
+ +
+
+ **plan_version_id:** `typing.Optional[str]` — Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used
@@ -17317,8 +17479,8 @@ client.features.count_flags(
-## integrationsapi -
client.integrationsapi.get_integration_webhook_url(...) -> GetIntegrationWebhookUrlResponse +## insights +
client.insights.get_activity(...) -> GetActivityResponse
@@ -17339,8 +17501,8 @@ client = Schematic( environment=SchematicEnvironment.DEFAULT, ) -client.integrationsapi.get_integration_webhook_url( - type="type", +client.insights.get_activity( + limit=1000000, ) ``` @@ -17357,7 +17519,784 @@ client.integrationsapi.get_integration_webhook_url(
-**type:** `str` — type +**limit:** `typing.Optional[int]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+ + +
client.insights.get_environment_feature_usage_time_series(...) -> GetEnvironmentFeatureUsageTimeSeriesResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment +import datetime + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.insights.get_environment_feature_usage_time_series( + end_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + feature_id="feature_id", + granularity="daily", + start_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**end_time:** `datetime.datetime` + +
+
+ +
+
+ +**feature_id:** `str` + +
+
+ +
+
+ +**start_time:** `datetime.datetime` + +
+
+ +
+
+ +**granularity:** `typing.Optional[TimeSeriesGranularity]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.insights.get_plan_growth(...) -> GetPlanGrowthResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.insights.get_plan_growth( + months=1000000, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**months:** `typing.Optional[int]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.insights.get_summary() -> GetSummaryResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.insights.get_summary() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.insights.get_top_features_by_usage(...) -> GetTopFeaturesByUsageResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment +import datetime + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.insights.get_top_features_by_usage( + end_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + limit=1000000, + start_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**end_time:** `datetime.datetime` + +
+
+ +
+
+ +**start_time:** `datetime.datetime` + +
+
+ +
+
+ +**limit:** `typing.Optional[int]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.insights.get_environment_trait_usage_time_series(...) -> GetEnvironmentTraitUsageTimeSeriesResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment +import datetime + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.insights.get_environment_trait_usage_time_series( + end_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + feature_id="feature_id", + granularity="daily", + start_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**end_time:** `datetime.datetime` + +
+
+ +
+
+ +**feature_id:** `str` + +
+
+ +
+
+ +**start_time:** `datetime.datetime` + +
+
+ +
+
+ +**granularity:** `typing.Optional[TimeSeriesGranularity]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## integrationsapi +
client.integrationsapi.run_integration(...) -> RunIntegrationResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.integrationsapi.run_integration( + integration_id="integration_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**integration_id:** `str` — integration_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.integrationsapi.list_integrations(...) -> ListIntegrationsResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.integrationsapi.list_integrations( + billing_only=True, + exclude_ids=[ + "exclude_ids" + ], + id="id", + state="active", + type="clerk", + limit=1000000, + offset=1000000, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**billing_only:** `typing.Optional[bool]` + +
+
+ +
+
+ +**exclude_ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]` + +
+
+ +
+
+ +**id:** `typing.Optional[str]` + +
+
+ +
+
+ +**state:** `typing.Optional[IntegrationState]` + +
+
+ +
+
+ +**type:** `typing.Optional[IntegrationType]` + +
+
+ +
+
+ +**limit:** `typing.Optional[int]` — Page limit (default 100) + +
+
+ +
+
+ +**offset:** `typing.Optional[int]` — Page offset (default 0) + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.integrationsapi.get_integration_webhook_url(...) -> GetIntegrationWebhookUrlResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.integrationsapi.get_integration_webhook_url( + type="type", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**type:** `str` — type + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.integrationsapi.start_data_import(...) -> StartDataImportResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.integrationsapi.start_data_import( + integration_id="integration_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**integration_id:** `str` + +
+
+ +
+
+ +**company_matching_criteria:** `typing.Optional[CompanyMatchingCriteria]` + +
+
+ +
+
+ +**company_matching_field:** `typing.Optional[str]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.integrationsapi.load_sample_data_set_v_2() -> LoadSampleDataSetV2Response +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.integrationsapi.load_sample_data_set_v_2() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.integrationsapi.uninstall_integration(...) -> UninstallIntegrationResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.integrationsapi.uninstall_integration( + integration_id="integration_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**integration_id:** `str` — integration_id
diff --git a/src/schematic/__init__.py b/src/schematic/__init__.py index 7fae489..b88ba26 100644 --- a/src/schematic/__init__.py +++ b/src/schematic/__init__.py @@ -10,9 +10,12 @@ AccountMemberPermission, AccountMemberResponseData, AccountMemberRole, + ActivityEntryResponseData, + ActivityResponseResponseData, ActorType, ApiError, ApiKeyCreateResponseData, + ApiKeyIntegrationResponseData, ApiKeyResponseData, ApiKeyScope, AuditLogListResponseData, @@ -72,13 +75,17 @@ CheckoutDataResponseData, CheckoutSettingsResponseData, CheckoutSubscription, + ClerkIntegrationConfig, + CompanyCreditBalanceResponseData, CompanyDetailResponseData, CompanyEventPeriodMetricsResponseData, CompanyLedgerResponseData, + CompanyMatchingCriteria, CompanyMembershipDetailResponseData, CompanyMembershipResponseData, CompanyOverrideNoteResponseData, CompanyOverrideResponseData, + CompanyPlanCreditGrantView, CompanyPlanDetailResponseData, CompanyPlanInvalidReason, CompanyPlanWithBillingSubView, @@ -123,6 +130,7 @@ CreditBundleCurrencyPriceResponseData, CreditBundlePurchaseResponseData, CreditCompanyGrantView, + CreditCurrencyPrice, CreditCurrencyPriceRequestBody, CreditCurrencyPriceResponseData, CreditEventLedgerResponseData, @@ -171,8 +179,11 @@ EntityTraitValue, EntityType, EnvironmentDetailResponseData, + EnvironmentFeatureUsageTimeSeriesResponseData, EnvironmentResponseData, + EnvironmentTraitUsageTimeSeriesResponseData, EnvironmentType, + EnvironmentUsagePointResponseData, EventBody, EventBodyFlagCheck, EventBodyIdentify, @@ -203,8 +214,19 @@ FlagType, FlagView, GenericPreviewObject, + InsightsSummaryResponseData, + IntegrationCapabilities, + IntegrationConfig, + IntegrationConfig_Clerk, + IntegrationConfig_Orb, + IntegrationConfig_Stripe, + IntegrationResponseData, + IntegrationState, IntegrationType, IntegrationWebhookUrlResponseData, + IntegrationsDataSetResponseData, + IntegrationsListResponseData, + IntegrationsResponseData, InvoiceRequestBody, InvoiceResponseData, InvoiceStatus, @@ -217,6 +239,8 @@ MeterRequestBody, MetricPeriod, MetricPeriodMonthReset, + MrrResponseData, + OrbIntegrationConfig, OrderedPlansInGroup, PaymentMethodRequestBody, PaymentMethodResponseData, @@ -239,6 +263,8 @@ PlanGroupPlanDetailResponseData, PlanGroupPlanEntitlementsOrder, PlanGroupResponseData, + PlanGrowthPointResponseData, + PlanGrowthResponseData, PlanIcon, PlanIssueResponseData, PlanResponseData, @@ -304,17 +330,21 @@ SkippedEntitlementResponseData, SortDirection, StripeEmbedInfo, + StripeIntegrationConfig, SubscriptionStatus, SubscriptionTraitUpdate, SubscriptionType, TemporaryAccessTokenResourceType, TemporaryAccessTokenResponseData, TimeSeriesGranularity, + TopFeatureByUsageResponseData, + TopFeaturesByUsageResponseData, TraitDefinition, TraitDefinitionComparableType, TraitType, TrialStatus, UpdateAddOnRequestBody, + UpdateAutoTopupOverrideRequestBody, UpdateBillingPlanCreditGrantRequestBody, UpdateCreditBundleRequestBody, UpdateEntitlementReqCommon, @@ -357,6 +387,7 @@ entitlements, events, features, + insights, integrationsapi, planbundle, plangroups, @@ -533,6 +564,8 @@ ListBillingCreditsResponse, ListBillingPlanCreditGrantsParams, ListBillingPlanCreditGrantsResponse, + ListCompanyCreditBalancesParams, + ListCompanyCreditBalancesResponse, ListCompanyGrantsParams, ListCompanyGrantsResponse, ListCreditBundlesParams, @@ -618,7 +651,28 @@ UpdateFlagRulesResponse, UpsertFeatureForBillingProductResponse, ) - from .integrationsapi import GetIntegrationWebhookUrlResponse + from .insights import ( + GetActivityParams, + GetActivityResponse, + GetEnvironmentFeatureUsageTimeSeriesParams, + GetEnvironmentFeatureUsageTimeSeriesResponse, + GetEnvironmentTraitUsageTimeSeriesParams, + GetEnvironmentTraitUsageTimeSeriesResponse, + GetPlanGrowthParams, + GetPlanGrowthResponse, + GetSummaryResponse, + GetTopFeaturesByUsageParams, + GetTopFeaturesByUsageResponse, + ) + from .integrationsapi import ( + GetIntegrationWebhookUrlResponse, + ListIntegrationsParams, + ListIntegrationsResponse, + LoadSampleDataSetV2Response, + RunIntegrationResponse, + StartDataImportResponse, + UninstallIntegrationResponse, + ) from .planbundle import CreatePlanBundleResponse, UpdatePlanBundleResponse from .plangroups import CreatePlanGroupResponse, GetPlanGroupParams, GetPlanGroupResponse, UpdatePlanGroupResponse from .planmigrations import ( @@ -686,9 +740,12 @@ "AccountMemberPermission": ".types", "AccountMemberResponseData": ".types", "AccountMemberRole": ".types", + "ActivityEntryResponseData": ".types", + "ActivityResponseResponseData": ".types", "ActorType": ".types", "ApiError": ".types", "ApiKeyCreateResponseData": ".types", + "ApiKeyIntegrationResponseData": ".types", "ApiKeyResponseData": ".types", "ApiKeyScope": ".types", "AsyncSchematic": ".client", @@ -756,13 +813,17 @@ "CheckoutInternalResponse": ".checkout", "CheckoutSettingsResponseData": ".types", "CheckoutSubscription": ".types", + "ClerkIntegrationConfig": ".types", + "CompanyCreditBalanceResponseData": ".types", "CompanyDetailResponseData": ".types", "CompanyEventPeriodMetricsResponseData": ".types", "CompanyLedgerResponseData": ".types", + "CompanyMatchingCriteria": ".types", "CompanyMembershipDetailResponseData": ".types", "CompanyMembershipResponseData": ".types", "CompanyOverrideNoteResponseData": ".types", "CompanyOverrideResponseData": ".types", + "CompanyPlanCreditGrantView": ".types", "CompanyPlanDetailResponseData": ".types", "CompanyPlanInvalidReason": ".types", "CompanyPlanWithBillingSubView": ".types", @@ -888,6 +949,7 @@ "CreditBundleCurrencyPriceResponseData": ".types", "CreditBundlePurchaseResponseData": ".types", "CreditCompanyGrantView": ".types", + "CreditCurrencyPrice": ".types", "CreditCurrencyPriceRequestBody": ".types", "CreditCurrencyPriceResponseData": ".types", "CreditEventLedgerResponseData": ".types", @@ -959,8 +1021,11 @@ "EntityTraitValue": ".types", "EntityType": ".types", "EnvironmentDetailResponseData": ".types", + "EnvironmentFeatureUsageTimeSeriesResponseData": ".types", "EnvironmentResponseData": ".types", + "EnvironmentTraitUsageTimeSeriesResponseData": ".types", "EnvironmentType": ".types", + "EnvironmentUsagePointResponseData": ".types", "EventBody": ".types", "EventBodyFlagCheck": ".types", "EventBodyIdentify": ".types", @@ -995,6 +1060,8 @@ "GetAccountMemberResponse": ".accounts", "GetActiveCompanySubscriptionParams": ".companies", "GetActiveCompanySubscriptionResponse": ".companies", + "GetActivityParams": ".insights", + "GetActivityResponse": ".insights", "GetApiKeyResponse": ".accounts", "GetAuditLogResponse": ".accounts", "GetCheckoutDataResponse": ".checkout", @@ -1007,7 +1074,11 @@ "GetEntityTraitDefinitionResponse": ".companies", "GetEntityTraitValuesParams": ".companies", "GetEntityTraitValuesResponse": ".companies", + "GetEnvironmentFeatureUsageTimeSeriesParams": ".insights", + "GetEnvironmentFeatureUsageTimeSeriesResponse": ".insights", "GetEnvironmentResponse": ".accounts", + "GetEnvironmentTraitUsageTimeSeriesParams": ".insights", + "GetEnvironmentTraitUsageTimeSeriesResponse": ".insights", "GetEventResponse": ".events", "GetEventSummariesParams": ".events", "GetEventSummariesResponse": ".events", @@ -1025,6 +1096,8 @@ "GetPlanEntitlementResponse": ".entitlements", "GetPlanGroupParams": ".plangroups", "GetPlanGroupResponse": ".plangroups", + "GetPlanGrowthParams": ".insights", + "GetPlanGrowthResponse": ".insights", "GetPlanParams": ".plans", "GetPlanResponse": ".plans", "GetPlanTraitResponse": ".companies", @@ -1033,13 +1106,27 @@ "GetSegmentIntegrationStatusResponse": ".events", "GetSingleBillingCreditResponse": ".credits", "GetSingleBillingPlanCreditGrantResponse": ".credits", + "GetSummaryResponse": ".insights", + "GetTopFeaturesByUsageParams": ".insights", + "GetTopFeaturesByUsageResponse": ".insights", "GetUserResponse": ".companies", "GetWebhookEventResponse": ".webhooks", "GetWebhookResponse": ".webhooks", "GetWhoAmIResponse": ".accounts", "GrantBillingCreditsToCompanyResponse": ".credits", + "InsightsSummaryResponseData": ".types", + "IntegrationCapabilities": ".types", + "IntegrationConfig": ".types", + "IntegrationConfig_Clerk": ".types", + "IntegrationConfig_Orb": ".types", + "IntegrationConfig_Stripe": ".types", + "IntegrationResponseData": ".types", + "IntegrationState": ".types", "IntegrationType": ".types", "IntegrationWebhookUrlResponseData": ".types", + "IntegrationsDataSetResponseData": ".types", + "IntegrationsListResponseData": ".types", + "IntegrationsResponseData": ".types", "InternalServerError": ".errors", "InvoiceRequestBody": ".types", "InvoiceResponseData": ".types", @@ -1068,6 +1155,8 @@ "ListBillingProductsResponse": ".billing", "ListCompaniesParams": ".companies", "ListCompaniesResponse": ".companies", + "ListCompanyCreditBalancesParams": ".credits", + "ListCompanyCreditBalancesResponse": ".credits", "ListCompanyGrantsParams": ".credits", "ListCompanyGrantsResponse": ".credits", "ListCompanyMembershipsParams": ".companies", @@ -1108,6 +1197,8 @@ "ListFlagsResponse": ".features", "ListGrantsForCreditParams": ".credits", "ListGrantsForCreditResponse": ".credits", + "ListIntegrationsParams": ".integrationsapi", + "ListIntegrationsResponse": ".integrationsapi", "ListInvoicesParams": ".billing", "ListInvoicesResponse": ".billing", "ListMetersParams": ".billing", @@ -1134,6 +1225,7 @@ "ListWebhookEventsResponse": ".webhooks", "ListWebhooksParams": ".webhooks", "ListWebhooksResponse": ".webhooks", + "LoadSampleDataSetV2Response": ".integrationsapi", "LocalCache": ".client", "LookupCompanyParams": ".companies", "LookupCompanyResponse": ".companies", @@ -1146,7 +1238,9 @@ "MeterRequestBody": ".types", "MetricPeriod": ".types", "MetricPeriodMonthReset": ".types", + "MrrResponseData": ".types", "NotFoundError": ".errors", + "OrbIntegrationConfig": ".types", "OrderedPlansInGroup": ".types", "PaymentMethodRequestBody": ".types", "PaymentMethodResponseData": ".types", @@ -1169,6 +1263,8 @@ "PlanGroupPlanDetailResponseData": ".types", "PlanGroupPlanEntitlementsOrder": ".types", "PlanGroupResponseData": ".types", + "PlanGrowthPointResponseData": ".types", + "PlanGrowthResponseData": ".types", "PlanIcon": ".types", "PlanIssueResponseData": ".types", "PlanResponseData": ".types", @@ -1232,6 +1328,7 @@ "RulesengineTraitDefinition": ".types", "RulesengineTraitDefinitionComparableType": ".types", "RulesengineUser": ".types", + "RunIntegrationResponse": ".integrationsapi", "ScheduledCheckoutResponseData": ".types", "ScheduledCheckoutStatus": ".types", "ScheduledDowngradeConfigBehavior": ".types", @@ -1244,20 +1341,26 @@ "SkippedEntitlementResponseData": ".types", "SoftDeleteBillingCreditResponse": ".credits", "SortDirection": ".types", + "StartDataImportResponse": ".integrationsapi", "StripeEmbedInfo": ".types", + "StripeIntegrationConfig": ".types", "SubscriptionStatus": ".types", "SubscriptionTraitUpdate": ".types", "SubscriptionType": ".types", "TemporaryAccessTokenResourceType": ".types", "TemporaryAccessTokenResponseData": ".types", "TimeSeriesGranularity": ".types", + "TopFeatureByUsageResponseData": ".types", + "TopFeaturesByUsageResponseData": ".types", "TraitDefinition": ".types", "TraitDefinitionComparableType": ".types", "TraitType": ".types", "TrialStatus": ".types", "UnauthorizedError": ".errors", + "UninstallIntegrationResponse": ".integrationsapi", "UpdateAddOnRequestBody": ".types", "UpdateApiKeyResponse": ".accounts", + "UpdateAutoTopupOverrideRequestBody": ".types", "UpdateBillingCreditResponse": ".credits", "UpdateBillingPlanCreditGrantRequestBody": ".types", "UpdateBillingPlanCreditGrantResponse": ".credits", @@ -1334,6 +1437,7 @@ "entitlements": ".entitlements", "events": ".events", "features": ".features", + "insights": ".insights", "integrationsapi": ".integrationsapi", "planbundle": ".planbundle", "plangroups": ".plangroups", @@ -1369,9 +1473,12 @@ def __dir__(): "AccountMemberPermission", "AccountMemberResponseData", "AccountMemberRole", + "ActivityEntryResponseData", + "ActivityResponseResponseData", "ActorType", "ApiError", "ApiKeyCreateResponseData", + "ApiKeyIntegrationResponseData", "ApiKeyResponseData", "ApiKeyScope", "AsyncSchematic", @@ -1439,13 +1546,17 @@ def __dir__(): "CheckoutInternalResponse", "CheckoutSettingsResponseData", "CheckoutSubscription", + "ClerkIntegrationConfig", + "CompanyCreditBalanceResponseData", "CompanyDetailResponseData", "CompanyEventPeriodMetricsResponseData", "CompanyLedgerResponseData", + "CompanyMatchingCriteria", "CompanyMembershipDetailResponseData", "CompanyMembershipResponseData", "CompanyOverrideNoteResponseData", "CompanyOverrideResponseData", + "CompanyPlanCreditGrantView", "CompanyPlanDetailResponseData", "CompanyPlanInvalidReason", "CompanyPlanWithBillingSubView", @@ -1571,6 +1682,7 @@ def __dir__(): "CreditBundleCurrencyPriceResponseData", "CreditBundlePurchaseResponseData", "CreditCompanyGrantView", + "CreditCurrencyPrice", "CreditCurrencyPriceRequestBody", "CreditCurrencyPriceResponseData", "CreditEventLedgerResponseData", @@ -1642,8 +1754,11 @@ def __dir__(): "EntityTraitValue", "EntityType", "EnvironmentDetailResponseData", + "EnvironmentFeatureUsageTimeSeriesResponseData", "EnvironmentResponseData", + "EnvironmentTraitUsageTimeSeriesResponseData", "EnvironmentType", + "EnvironmentUsagePointResponseData", "EventBody", "EventBodyFlagCheck", "EventBodyIdentify", @@ -1678,6 +1793,8 @@ def __dir__(): "GetAccountMemberResponse", "GetActiveCompanySubscriptionParams", "GetActiveCompanySubscriptionResponse", + "GetActivityParams", + "GetActivityResponse", "GetApiKeyResponse", "GetAuditLogResponse", "GetCheckoutDataResponse", @@ -1690,7 +1807,11 @@ def __dir__(): "GetEntityTraitDefinitionResponse", "GetEntityTraitValuesParams", "GetEntityTraitValuesResponse", + "GetEnvironmentFeatureUsageTimeSeriesParams", + "GetEnvironmentFeatureUsageTimeSeriesResponse", "GetEnvironmentResponse", + "GetEnvironmentTraitUsageTimeSeriesParams", + "GetEnvironmentTraitUsageTimeSeriesResponse", "GetEventResponse", "GetEventSummariesParams", "GetEventSummariesResponse", @@ -1708,6 +1829,8 @@ def __dir__(): "GetPlanEntitlementResponse", "GetPlanGroupParams", "GetPlanGroupResponse", + "GetPlanGrowthParams", + "GetPlanGrowthResponse", "GetPlanParams", "GetPlanResponse", "GetPlanTraitResponse", @@ -1716,13 +1839,27 @@ def __dir__(): "GetSegmentIntegrationStatusResponse", "GetSingleBillingCreditResponse", "GetSingleBillingPlanCreditGrantResponse", + "GetSummaryResponse", + "GetTopFeaturesByUsageParams", + "GetTopFeaturesByUsageResponse", "GetUserResponse", "GetWebhookEventResponse", "GetWebhookResponse", "GetWhoAmIResponse", "GrantBillingCreditsToCompanyResponse", + "InsightsSummaryResponseData", + "IntegrationCapabilities", + "IntegrationConfig", + "IntegrationConfig_Clerk", + "IntegrationConfig_Orb", + "IntegrationConfig_Stripe", + "IntegrationResponseData", + "IntegrationState", "IntegrationType", "IntegrationWebhookUrlResponseData", + "IntegrationsDataSetResponseData", + "IntegrationsListResponseData", + "IntegrationsResponseData", "InternalServerError", "InvoiceRequestBody", "InvoiceResponseData", @@ -1751,6 +1888,8 @@ def __dir__(): "ListBillingProductsResponse", "ListCompaniesParams", "ListCompaniesResponse", + "ListCompanyCreditBalancesParams", + "ListCompanyCreditBalancesResponse", "ListCompanyGrantsParams", "ListCompanyGrantsResponse", "ListCompanyMembershipsParams", @@ -1791,6 +1930,8 @@ def __dir__(): "ListFlagsResponse", "ListGrantsForCreditParams", "ListGrantsForCreditResponse", + "ListIntegrationsParams", + "ListIntegrationsResponse", "ListInvoicesParams", "ListInvoicesResponse", "ListMetersParams", @@ -1817,6 +1958,7 @@ def __dir__(): "ListWebhookEventsResponse", "ListWebhooksParams", "ListWebhooksResponse", + "LoadSampleDataSetV2Response", "LocalCache", "LookupCompanyParams", "LookupCompanyResponse", @@ -1829,7 +1971,9 @@ def __dir__(): "MeterRequestBody", "MetricPeriod", "MetricPeriodMonthReset", + "MrrResponseData", "NotFoundError", + "OrbIntegrationConfig", "OrderedPlansInGroup", "PaymentMethodRequestBody", "PaymentMethodResponseData", @@ -1852,6 +1996,8 @@ def __dir__(): "PlanGroupPlanDetailResponseData", "PlanGroupPlanEntitlementsOrder", "PlanGroupResponseData", + "PlanGrowthPointResponseData", + "PlanGrowthResponseData", "PlanIcon", "PlanIssueResponseData", "PlanResponseData", @@ -1915,6 +2061,7 @@ def __dir__(): "RulesengineTraitDefinition", "RulesengineTraitDefinitionComparableType", "RulesengineUser", + "RunIntegrationResponse", "ScheduledCheckoutResponseData", "ScheduledCheckoutStatus", "ScheduledDowngradeConfigBehavior", @@ -1927,20 +2074,26 @@ def __dir__(): "SkippedEntitlementResponseData", "SoftDeleteBillingCreditResponse", "SortDirection", + "StartDataImportResponse", "StripeEmbedInfo", + "StripeIntegrationConfig", "SubscriptionStatus", "SubscriptionTraitUpdate", "SubscriptionType", "TemporaryAccessTokenResourceType", "TemporaryAccessTokenResponseData", "TimeSeriesGranularity", + "TopFeatureByUsageResponseData", + "TopFeaturesByUsageResponseData", "TraitDefinition", "TraitDefinitionComparableType", "TraitType", "TrialStatus", "UnauthorizedError", + "UninstallIntegrationResponse", "UpdateAddOnRequestBody", "UpdateApiKeyResponse", + "UpdateAutoTopupOverrideRequestBody", "UpdateBillingCreditResponse", "UpdateBillingPlanCreditGrantRequestBody", "UpdateBillingPlanCreditGrantResponse", @@ -2017,6 +2170,7 @@ def __dir__(): "entitlements", "events", "features", + "insights", "integrationsapi", "planbundle", "plangroups", diff --git a/src/schematic/base_client.py b/src/schematic/base_client.py index 0dbd075..864ba7b 100644 --- a/src/schematic/base_client.py +++ b/src/schematic/base_client.py @@ -22,6 +22,7 @@ from .entitlements.client import AsyncEntitlementsClient, EntitlementsClient from .events.client import AsyncEventsClient, EventsClient from .features.client import AsyncFeaturesClient, FeaturesClient + from .insights.client import AsyncInsightsClient, InsightsClient from .integrationsapi.client import AsyncIntegrationsapiClient, IntegrationsapiClient from .planbundle.client import AsyncPlanbundleClient, PlanbundleClient from .plangroups.client import AsyncPlangroupsClient, PlangroupsClient @@ -112,6 +113,7 @@ def __init__( self._dataexports: typing.Optional[DataexportsClient] = None self._events: typing.Optional[EventsClient] = None self._features: typing.Optional[FeaturesClient] = None + self._insights: typing.Optional[InsightsClient] = None self._integrationsapi: typing.Optional[IntegrationsapiClient] = None self._planbundle: typing.Optional[PlanbundleClient] = None self._plangroups: typing.Optional[PlangroupsClient] = None @@ -209,6 +211,14 @@ def features(self): self._features = FeaturesClient(client_wrapper=self._client_wrapper) return self._features + @property + def insights(self): + if self._insights is None: + from .insights.client import InsightsClient # noqa: E402 + + self._insights = InsightsClient(client_wrapper=self._client_wrapper) + return self._insights + @property def integrationsapi(self): if self._integrationsapi is None: @@ -355,6 +365,7 @@ def __init__( self._dataexports: typing.Optional[AsyncDataexportsClient] = None self._events: typing.Optional[AsyncEventsClient] = None self._features: typing.Optional[AsyncFeaturesClient] = None + self._insights: typing.Optional[AsyncInsightsClient] = None self._integrationsapi: typing.Optional[AsyncIntegrationsapiClient] = None self._planbundle: typing.Optional[AsyncPlanbundleClient] = None self._plangroups: typing.Optional[AsyncPlangroupsClient] = None @@ -452,6 +463,14 @@ def features(self): self._features = AsyncFeaturesClient(client_wrapper=self._client_wrapper) return self._features + @property + def insights(self): + if self._insights is None: + from .insights.client import AsyncInsightsClient # noqa: E402 + + self._insights = AsyncInsightsClient(client_wrapper=self._client_wrapper) + return self._insights + @property def integrationsapi(self): if self._integrationsapi is None: diff --git a/src/schematic/billing/client.py b/src/schematic/billing/client.py index 5faffeb..adf387a 100644 --- a/src/schematic/billing/client.py +++ b/src/schematic/billing/client.py @@ -1220,6 +1220,7 @@ def list_billing_products( price_usage_type: typing.Optional[BillingPriceUsageType] = None, provider_type: typing.Optional[BillingProviderType] = None, q: typing.Optional[str] = None, + recurring_charges_only: typing.Optional[bool] = None, with_one_time_charges: typing.Optional[bool] = None, with_prices_only: typing.Optional[bool] = None, with_zero_price: typing.Optional[bool] = None, @@ -1244,6 +1245,9 @@ def list_billing_products( q : typing.Optional[str] + recurring_charges_only : typing.Optional[bool] + Filter to products that have at least one recurring price + with_one_time_charges : typing.Optional[bool] Filter products that are one time charges @@ -1284,6 +1288,7 @@ def list_billing_products( price_usage_type="licensed", provider_type="orb", q="q", + recurring_charges_only=True, with_one_time_charges=True, with_prices_only=True, with_zero_price=True, @@ -1299,6 +1304,7 @@ def list_billing_products( price_usage_type=price_usage_type, provider_type=provider_type, q=q, + recurring_charges_only=recurring_charges_only, with_one_time_charges=with_one_time_charges, with_prices_only=with_prices_only, with_zero_price=with_zero_price, @@ -1318,6 +1324,7 @@ def count_billing_products( price_usage_type: typing.Optional[BillingPriceUsageType] = None, provider_type: typing.Optional[BillingProviderType] = None, q: typing.Optional[str] = None, + recurring_charges_only: typing.Optional[bool] = None, with_one_time_charges: typing.Optional[bool] = None, with_prices_only: typing.Optional[bool] = None, with_zero_price: typing.Optional[bool] = None, @@ -1342,6 +1349,9 @@ def count_billing_products( q : typing.Optional[str] + recurring_charges_only : typing.Optional[bool] + Filter to products that have at least one recurring price + with_one_time_charges : typing.Optional[bool] Filter products that are one time charges @@ -1382,6 +1392,7 @@ def count_billing_products( price_usage_type="licensed", provider_type="orb", q="q", + recurring_charges_only=True, with_one_time_charges=True, with_prices_only=True, with_zero_price=True, @@ -1397,6 +1408,7 @@ def count_billing_products( price_usage_type=price_usage_type, provider_type=provider_type, q=q, + recurring_charges_only=recurring_charges_only, with_one_time_charges=with_one_time_charges, with_prices_only=with_prices_only, with_zero_price=with_zero_price, @@ -2870,6 +2882,7 @@ async def list_billing_products( price_usage_type: typing.Optional[BillingPriceUsageType] = None, provider_type: typing.Optional[BillingProviderType] = None, q: typing.Optional[str] = None, + recurring_charges_only: typing.Optional[bool] = None, with_one_time_charges: typing.Optional[bool] = None, with_prices_only: typing.Optional[bool] = None, with_zero_price: typing.Optional[bool] = None, @@ -2894,6 +2907,9 @@ async def list_billing_products( q : typing.Optional[str] + recurring_charges_only : typing.Optional[bool] + Filter to products that have at least one recurring price + with_one_time_charges : typing.Optional[bool] Filter products that are one time charges @@ -2939,6 +2955,7 @@ async def main() -> None: price_usage_type="licensed", provider_type="orb", q="q", + recurring_charges_only=True, with_one_time_charges=True, with_prices_only=True, with_zero_price=True, @@ -2957,6 +2974,7 @@ async def main() -> None: price_usage_type=price_usage_type, provider_type=provider_type, q=q, + recurring_charges_only=recurring_charges_only, with_one_time_charges=with_one_time_charges, with_prices_only=with_prices_only, with_zero_price=with_zero_price, @@ -2976,6 +2994,7 @@ async def count_billing_products( price_usage_type: typing.Optional[BillingPriceUsageType] = None, provider_type: typing.Optional[BillingProviderType] = None, q: typing.Optional[str] = None, + recurring_charges_only: typing.Optional[bool] = None, with_one_time_charges: typing.Optional[bool] = None, with_prices_only: typing.Optional[bool] = None, with_zero_price: typing.Optional[bool] = None, @@ -3000,6 +3019,9 @@ async def count_billing_products( q : typing.Optional[str] + recurring_charges_only : typing.Optional[bool] + Filter to products that have at least one recurring price + with_one_time_charges : typing.Optional[bool] Filter products that are one time charges @@ -3045,6 +3067,7 @@ async def main() -> None: price_usage_type="licensed", provider_type="orb", q="q", + recurring_charges_only=True, with_one_time_charges=True, with_prices_only=True, with_zero_price=True, @@ -3063,6 +3086,7 @@ async def main() -> None: price_usage_type=price_usage_type, provider_type=provider_type, q=q, + recurring_charges_only=recurring_charges_only, with_one_time_charges=with_one_time_charges, with_prices_only=with_prices_only, with_zero_price=with_zero_price, diff --git a/src/schematic/billing/raw_client.py b/src/schematic/billing/raw_client.py index d2d02aa..0c51e8d 100644 --- a/src/schematic/billing/raw_client.py +++ b/src/schematic/billing/raw_client.py @@ -2347,6 +2347,7 @@ def list_billing_products( price_usage_type: typing.Optional[BillingPriceUsageType] = None, provider_type: typing.Optional[BillingProviderType] = None, q: typing.Optional[str] = None, + recurring_charges_only: typing.Optional[bool] = None, with_one_time_charges: typing.Optional[bool] = None, with_prices_only: typing.Optional[bool] = None, with_zero_price: typing.Optional[bool] = None, @@ -2371,6 +2372,9 @@ def list_billing_products( q : typing.Optional[str] + recurring_charges_only : typing.Optional[bool] + Filter to products that have at least one recurring price + with_one_time_charges : typing.Optional[bool] Filter products that are one time charges @@ -2407,6 +2411,7 @@ def list_billing_products( "price_usage_type": price_usage_type, "provider_type": provider_type, "q": q, + "recurring_charges_only": recurring_charges_only, "with_one_time_charges": with_one_time_charges, "with_prices_only": with_prices_only, "with_zero_price": with_zero_price, @@ -2503,6 +2508,7 @@ def count_billing_products( price_usage_type: typing.Optional[BillingPriceUsageType] = None, provider_type: typing.Optional[BillingProviderType] = None, q: typing.Optional[str] = None, + recurring_charges_only: typing.Optional[bool] = None, with_one_time_charges: typing.Optional[bool] = None, with_prices_only: typing.Optional[bool] = None, with_zero_price: typing.Optional[bool] = None, @@ -2527,6 +2533,9 @@ def count_billing_products( q : typing.Optional[str] + recurring_charges_only : typing.Optional[bool] + Filter to products that have at least one recurring price + with_one_time_charges : typing.Optional[bool] Filter products that are one time charges @@ -2563,6 +2572,7 @@ def count_billing_products( "price_usage_type": price_usage_type, "provider_type": provider_type, "q": q, + "recurring_charges_only": recurring_charges_only, "with_one_time_charges": with_one_time_charges, "with_prices_only": with_prices_only, "with_zero_price": with_zero_price, @@ -5134,6 +5144,7 @@ async def list_billing_products( price_usage_type: typing.Optional[BillingPriceUsageType] = None, provider_type: typing.Optional[BillingProviderType] = None, q: typing.Optional[str] = None, + recurring_charges_only: typing.Optional[bool] = None, with_one_time_charges: typing.Optional[bool] = None, with_prices_only: typing.Optional[bool] = None, with_zero_price: typing.Optional[bool] = None, @@ -5158,6 +5169,9 @@ async def list_billing_products( q : typing.Optional[str] + recurring_charges_only : typing.Optional[bool] + Filter to products that have at least one recurring price + with_one_time_charges : typing.Optional[bool] Filter products that are one time charges @@ -5194,6 +5208,7 @@ async def list_billing_products( "price_usage_type": price_usage_type, "provider_type": provider_type, "q": q, + "recurring_charges_only": recurring_charges_only, "with_one_time_charges": with_one_time_charges, "with_prices_only": with_prices_only, "with_zero_price": with_zero_price, @@ -5290,6 +5305,7 @@ async def count_billing_products( price_usage_type: typing.Optional[BillingPriceUsageType] = None, provider_type: typing.Optional[BillingProviderType] = None, q: typing.Optional[str] = None, + recurring_charges_only: typing.Optional[bool] = None, with_one_time_charges: typing.Optional[bool] = None, with_prices_only: typing.Optional[bool] = None, with_zero_price: typing.Optional[bool] = None, @@ -5314,6 +5330,9 @@ async def count_billing_products( q : typing.Optional[str] + recurring_charges_only : typing.Optional[bool] + Filter to products that have at least one recurring price + with_one_time_charges : typing.Optional[bool] Filter products that are one time charges @@ -5350,6 +5369,7 @@ async def count_billing_products( "price_usage_type": price_usage_type, "provider_type": provider_type, "q": q, + "recurring_charges_only": recurring_charges_only, "with_one_time_charges": with_one_time_charges, "with_prices_only": with_prices_only, "with_zero_price": with_zero_price, diff --git a/src/schematic/billing/types/count_billing_products_params.py b/src/schematic/billing/types/count_billing_products_params.py index 8571863..cdb3137 100644 --- a/src/schematic/billing/types/count_billing_products_params.py +++ b/src/schematic/billing/types/count_billing_products_params.py @@ -33,6 +33,11 @@ class CountBillingProductsParams(UniversalBaseModel): price_usage_type: typing.Optional[BillingPriceUsageType] = None provider_type: typing.Optional[BillingProviderType] = None q: typing.Optional[str] = None + recurring_charges_only: typing.Optional[bool] = pydantic.Field(default=None) + """ + Filter to products that have at least one recurring price + """ + with_one_time_charges: typing.Optional[bool] = pydantic.Field(default=None) """ Filter products that are one time charges diff --git a/src/schematic/billing/types/list_billing_products_params.py b/src/schematic/billing/types/list_billing_products_params.py index 535e85d..dae2772 100644 --- a/src/schematic/billing/types/list_billing_products_params.py +++ b/src/schematic/billing/types/list_billing_products_params.py @@ -33,6 +33,11 @@ class ListBillingProductsParams(UniversalBaseModel): price_usage_type: typing.Optional[BillingPriceUsageType] = None provider_type: typing.Optional[BillingProviderType] = None q: typing.Optional[str] = None + recurring_charges_only: typing.Optional[bool] = pydantic.Field(default=None) + """ + Filter to products that have at least one recurring price + """ + with_one_time_charges: typing.Optional[bool] = pydantic.Field(default=None) """ Filter products that are one time charges diff --git a/src/schematic/checkout/client.py b/src/schematic/checkout/client.py index 5f57a2f..1fbed9e 100644 --- a/src/schematic/checkout/client.py +++ b/src/schematic/checkout/client.py @@ -7,6 +7,7 @@ from ..core.request_options import RequestOptions from ..types.plan_selection import PlanSelection from ..types.update_add_on_request_body import UpdateAddOnRequestBody +from ..types.update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody from ..types.update_credit_bundle_request_body import UpdateCreditBundleRequestBody from ..types.update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody from .raw_client import AsyncRawCheckoutClient, RawCheckoutClient @@ -41,6 +42,7 @@ def internal( self, *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], + auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody], company_id: str, credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, @@ -57,6 +59,8 @@ def internal( ---------- add_on_ids : typing.Sequence[UpdateAddOnRequestBody] + auto_topup_overrides : typing.Sequence[UpdateAutoTopupOverrideRequestBody] + company_id : str credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] @@ -88,6 +92,7 @@ def internal( from schematic import ( Schematic, UpdateAddOnRequestBody, + UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody, ) @@ -102,6 +107,11 @@ def internal( price_id="price_id", ) ], + auto_topup_overrides=[ + UpdateAutoTopupOverrideRequestBody( + plan_credit_grant_id="plan_credit_grant_id", + ) + ], company_id="company_id", credit_bundles=[ UpdateCreditBundleRequestBody( @@ -122,6 +132,7 @@ def internal( """ _response = self._raw_client.internal( add_on_ids=add_on_ids, + auto_topup_overrides=auto_topup_overrides, company_id=company_id, credit_bundles=credit_bundles, new_plan_id=new_plan_id, @@ -177,6 +188,7 @@ def preview_checkout_internal( self, *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], + auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody], company_id: str, credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, @@ -193,6 +205,8 @@ def preview_checkout_internal( ---------- add_on_ids : typing.Sequence[UpdateAddOnRequestBody] + auto_topup_overrides : typing.Sequence[UpdateAutoTopupOverrideRequestBody] + company_id : str credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] @@ -224,6 +238,7 @@ def preview_checkout_internal( from schematic import ( Schematic, UpdateAddOnRequestBody, + UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody, ) @@ -238,6 +253,11 @@ def preview_checkout_internal( price_id="price_id", ) ], + auto_topup_overrides=[ + UpdateAutoTopupOverrideRequestBody( + plan_credit_grant_id="plan_credit_grant_id", + ) + ], company_id="company_id", credit_bundles=[ UpdateCreditBundleRequestBody( @@ -258,6 +278,7 @@ def preview_checkout_internal( """ _response = self._raw_client.preview_checkout_internal( add_on_ids=add_on_ids, + auto_topup_overrides=auto_topup_overrides, company_id=company_id, credit_bundles=credit_bundles, new_plan_id=new_plan_id, @@ -592,6 +613,7 @@ async def internal( self, *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], + auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody], company_id: str, credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, @@ -608,6 +630,8 @@ async def internal( ---------- add_on_ids : typing.Sequence[UpdateAddOnRequestBody] + auto_topup_overrides : typing.Sequence[UpdateAutoTopupOverrideRequestBody] + company_id : str credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] @@ -641,6 +665,7 @@ async def internal( from schematic import ( AsyncSchematic, UpdateAddOnRequestBody, + UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody, ) @@ -658,6 +683,11 @@ async def main() -> None: price_id="price_id", ) ], + auto_topup_overrides=[ + UpdateAutoTopupOverrideRequestBody( + plan_credit_grant_id="plan_credit_grant_id", + ) + ], company_id="company_id", credit_bundles=[ UpdateCreditBundleRequestBody( @@ -681,6 +711,7 @@ async def main() -> None: """ _response = await self._raw_client.internal( add_on_ids=add_on_ids, + auto_topup_overrides=auto_topup_overrides, company_id=company_id, credit_bundles=credit_bundles, new_plan_id=new_plan_id, @@ -744,6 +775,7 @@ async def preview_checkout_internal( self, *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], + auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody], company_id: str, credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, @@ -760,6 +792,8 @@ async def preview_checkout_internal( ---------- add_on_ids : typing.Sequence[UpdateAddOnRequestBody] + auto_topup_overrides : typing.Sequence[UpdateAutoTopupOverrideRequestBody] + company_id : str credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] @@ -793,6 +827,7 @@ async def preview_checkout_internal( from schematic import ( AsyncSchematic, UpdateAddOnRequestBody, + UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody, ) @@ -810,6 +845,11 @@ async def main() -> None: price_id="price_id", ) ], + auto_topup_overrides=[ + UpdateAutoTopupOverrideRequestBody( + plan_credit_grant_id="plan_credit_grant_id", + ) + ], company_id="company_id", credit_bundles=[ UpdateCreditBundleRequestBody( @@ -833,6 +873,7 @@ async def main() -> None: """ _response = await self._raw_client.preview_checkout_internal( add_on_ids=add_on_ids, + auto_topup_overrides=auto_topup_overrides, company_id=company_id, credit_bundles=credit_bundles, new_plan_id=new_plan_id, diff --git a/src/schematic/checkout/raw_client.py b/src/schematic/checkout/raw_client.py index cde331d..0134955 100644 --- a/src/schematic/checkout/raw_client.py +++ b/src/schematic/checkout/raw_client.py @@ -20,6 +20,7 @@ from ..types.api_error import ApiError as types_api_error_ApiError from ..types.plan_selection import PlanSelection from ..types.update_add_on_request_body import UpdateAddOnRequestBody +from ..types.update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody from ..types.update_credit_bundle_request_body import UpdateCreditBundleRequestBody from ..types.update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody from .types.cancel_subscription_response import CancelSubscriptionResponse @@ -43,6 +44,7 @@ def internal( self, *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], + auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody], company_id: str, credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, @@ -59,6 +61,8 @@ def internal( ---------- add_on_ids : typing.Sequence[UpdateAddOnRequestBody] + auto_topup_overrides : typing.Sequence[UpdateAutoTopupOverrideRequestBody] + company_id : str credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] @@ -92,6 +96,11 @@ def internal( "add_on_ids": convert_and_respect_annotation_metadata( object_=add_on_ids, annotation=typing.Sequence[UpdateAddOnRequestBody], direction="write" ), + "auto_topup_overrides": convert_and_respect_annotation_metadata( + object_=auto_topup_overrides, + annotation=typing.Sequence[UpdateAutoTopupOverrideRequestBody], + direction="write", + ), "company_id": company_id, "coupon_external_id": coupon_external_id, "credit_bundles": convert_and_respect_annotation_metadata( @@ -307,6 +316,7 @@ def preview_checkout_internal( self, *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], + auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody], company_id: str, credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, @@ -323,6 +333,8 @@ def preview_checkout_internal( ---------- add_on_ids : typing.Sequence[UpdateAddOnRequestBody] + auto_topup_overrides : typing.Sequence[UpdateAutoTopupOverrideRequestBody] + company_id : str credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] @@ -356,6 +368,11 @@ def preview_checkout_internal( "add_on_ids": convert_and_respect_annotation_metadata( object_=add_on_ids, annotation=typing.Sequence[UpdateAddOnRequestBody], direction="write" ), + "auto_topup_overrides": convert_and_respect_annotation_metadata( + object_=auto_topup_overrides, + annotation=typing.Sequence[UpdateAutoTopupOverrideRequestBody], + direction="write", + ), "company_id": company_id, "coupon_external_id": coupon_external_id, "credit_bundles": convert_and_respect_annotation_metadata( @@ -1029,6 +1046,7 @@ async def internal( self, *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], + auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody], company_id: str, credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, @@ -1045,6 +1063,8 @@ async def internal( ---------- add_on_ids : typing.Sequence[UpdateAddOnRequestBody] + auto_topup_overrides : typing.Sequence[UpdateAutoTopupOverrideRequestBody] + company_id : str credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] @@ -1078,6 +1098,11 @@ async def internal( "add_on_ids": convert_and_respect_annotation_metadata( object_=add_on_ids, annotation=typing.Sequence[UpdateAddOnRequestBody], direction="write" ), + "auto_topup_overrides": convert_and_respect_annotation_metadata( + object_=auto_topup_overrides, + annotation=typing.Sequence[UpdateAutoTopupOverrideRequestBody], + direction="write", + ), "company_id": company_id, "coupon_external_id": coupon_external_id, "credit_bundles": convert_and_respect_annotation_metadata( @@ -1293,6 +1318,7 @@ async def preview_checkout_internal( self, *, add_on_ids: typing.Sequence[UpdateAddOnRequestBody], + auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody], company_id: str, credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody], new_plan_id: str, @@ -1309,6 +1335,8 @@ async def preview_checkout_internal( ---------- add_on_ids : typing.Sequence[UpdateAddOnRequestBody] + auto_topup_overrides : typing.Sequence[UpdateAutoTopupOverrideRequestBody] + company_id : str credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody] @@ -1342,6 +1370,11 @@ async def preview_checkout_internal( "add_on_ids": convert_and_respect_annotation_metadata( object_=add_on_ids, annotation=typing.Sequence[UpdateAddOnRequestBody], direction="write" ), + "auto_topup_overrides": convert_and_respect_annotation_metadata( + object_=auto_topup_overrides, + annotation=typing.Sequence[UpdateAutoTopupOverrideRequestBody], + direction="write", + ), "company_id": company_id, "coupon_external_id": coupon_external_id, "credit_bundles": convert_and_respect_annotation_metadata( diff --git a/src/schematic/credits/__init__.py b/src/schematic/credits/__init__.py index 13c1dd5..67a9887 100644 --- a/src/schematic/credits/__init__.py +++ b/src/schematic/credits/__init__.py @@ -37,6 +37,8 @@ ListBillingCreditsResponse, ListBillingPlanCreditGrantsParams, ListBillingPlanCreditGrantsResponse, + ListCompanyCreditBalancesParams, + ListCompanyCreditBalancesResponse, ListCompanyGrantsParams, ListCompanyGrantsResponse, ListCreditBundlesParams, @@ -82,6 +84,8 @@ "ListBillingCreditsResponse": ".types", "ListBillingPlanCreditGrantsParams": ".types", "ListBillingPlanCreditGrantsResponse": ".types", + "ListCompanyCreditBalancesParams": ".types", + "ListCompanyCreditBalancesResponse": ".types", "ListCompanyGrantsParams": ".types", "ListCompanyGrantsResponse": ".types", "ListCreditBundlesParams": ".types", @@ -150,6 +154,8 @@ def __dir__(): "ListBillingCreditsResponse", "ListBillingPlanCreditGrantsParams", "ListBillingPlanCreditGrantsResponse", + "ListCompanyCreditBalancesParams", + "ListCompanyCreditBalancesResponse", "ListCompanyGrantsParams", "ListCompanyGrantsResponse", "ListCreditBundlesParams", diff --git a/src/schematic/credits/client.py b/src/schematic/credits/client.py index 57fa403..8cc0234 100644 --- a/src/schematic/credits/client.py +++ b/src/schematic/credits/client.py @@ -43,6 +43,7 @@ from .types.grant_billing_credits_to_company_response import GrantBillingCreditsToCompanyResponse from .types.list_billing_credits_response import ListBillingCreditsResponse from .types.list_billing_plan_credit_grants_response import ListBillingPlanCreditGrantsResponse +from .types.list_company_credit_balances_response import ListCompanyCreditBalancesResponse from .types.list_company_grants_response import ListCompanyGrantsResponse from .types.list_credit_bundles_response import ListCreditBundlesResponse from .types.list_credit_event_ledger_response import ListCreditEventLedgerResponse @@ -356,6 +357,38 @@ def soft_delete_billing_credit( _response = self._raw_client.soft_delete_billing_credit(credit_id, request_options=request_options) return _response.data + def list_company_credit_balances( + self, *, company_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> ListCompanyCreditBalancesResponse: + """ + Parameters + ---------- + company_id : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCompanyCreditBalancesResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.credits.list_company_credit_balances( + company_id="company_id", + ) + """ + _response = self._raw_client.list_company_credit_balances( + company_id=company_id, request_options=request_options + ) + return _response.data + def list_credit_bundles( self, *, @@ -1227,6 +1260,7 @@ def list_billing_plan_credit_grants( plan_id: typing.Optional[str] = None, plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_version_id: typing.Optional[str] = None, + plan_version_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, @@ -1244,6 +1278,8 @@ def list_billing_plan_credit_grants( plan_version_id : typing.Optional[str] + plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + limit : typing.Optional[int] Page limit (default 100) @@ -1271,6 +1307,7 @@ def list_billing_plan_credit_grants( plan_id="plan_id", plan_ids=["plan_ids"], plan_version_id="plan_version_id", + plan_version_ids=["plan_version_ids"], limit=1000000, offset=1000000, ) @@ -1281,6 +1318,7 @@ def list_billing_plan_credit_grants( plan_id=plan_id, plan_ids=plan_ids, plan_version_id=plan_version_id, + plan_version_ids=plan_version_ids, limit=limit, offset=offset, request_options=request_options, @@ -1302,6 +1340,7 @@ def create_billing_plan_credit_grant( auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT, auto_topup_expiry_unit_count: typing.Optional[int] = OMIT, + auto_topup_self_service: typing.Optional[bool] = OMIT, auto_topup_threshold_credits: typing.Optional[int] = OMIT, auto_topup_threshold_percent: typing.Optional[int] = OMIT, expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, @@ -1338,6 +1377,8 @@ def create_billing_plan_credit_grant( auto_topup_expiry_unit_count : typing.Optional[int] + auto_topup_self_service : typing.Optional[bool] + auto_topup_threshold_credits : typing.Optional[int] auto_topup_threshold_percent : typing.Optional[int] @@ -1388,6 +1429,7 @@ def create_billing_plan_credit_grant( auto_topup_expiry_type=auto_topup_expiry_type, auto_topup_expiry_unit=auto_topup_expiry_unit, auto_topup_expiry_unit_count=auto_topup_expiry_unit_count, + auto_topup_self_service=auto_topup_self_service, auto_topup_threshold_credits=auto_topup_threshold_credits, auto_topup_threshold_percent=auto_topup_threshold_percent, expiry_type=expiry_type, @@ -1445,6 +1487,7 @@ def update_billing_plan_credit_grant( auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT, auto_topup_expiry_unit_count: typing.Optional[int] = OMIT, + auto_topup_self_service: typing.Optional[bool] = OMIT, auto_topup_threshold_credits: typing.Optional[int] = OMIT, auto_topup_threshold_percent: typing.Optional[int] = OMIT, credit_amount: typing.Optional[int] = OMIT, @@ -1478,6 +1521,8 @@ def update_billing_plan_credit_grant( auto_topup_expiry_unit_count : typing.Optional[int] + auto_topup_self_service : typing.Optional[bool] + auto_topup_threshold_credits : typing.Optional[int] auto_topup_threshold_percent : typing.Optional[int] @@ -1524,6 +1569,7 @@ def update_billing_plan_credit_grant( auto_topup_expiry_type=auto_topup_expiry_type, auto_topup_expiry_unit=auto_topup_expiry_unit, auto_topup_expiry_unit_count=auto_topup_expiry_unit_count, + auto_topup_self_service=auto_topup_self_service, auto_topup_threshold_credits=auto_topup_threshold_credits, auto_topup_threshold_percent=auto_topup_threshold_percent, credit_amount=credit_amount, @@ -1583,6 +1629,7 @@ def count_billing_plan_credit_grants( plan_id: typing.Optional[str] = None, plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_version_id: typing.Optional[str] = None, + plan_version_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, @@ -1600,6 +1647,8 @@ def count_billing_plan_credit_grants( plan_version_id : typing.Optional[str] + plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + limit : typing.Optional[int] Page limit (default 100) @@ -1627,6 +1676,7 @@ def count_billing_plan_credit_grants( plan_id="plan_id", plan_ids=["plan_ids"], plan_version_id="plan_version_id", + plan_version_ids=["plan_version_ids"], limit=1000000, offset=1000000, ) @@ -1637,6 +1687,7 @@ def count_billing_plan_credit_grants( plan_id=plan_id, plan_ids=plan_ids, plan_version_id=plan_version_id, + plan_version_ids=plan_version_ids, limit=limit, offset=offset, request_options=request_options, @@ -2129,6 +2180,46 @@ async def main() -> None: _response = await self._raw_client.soft_delete_billing_credit(credit_id, request_options=request_options) return _response.data + async def list_company_credit_balances( + self, *, company_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> ListCompanyCreditBalancesResponse: + """ + Parameters + ---------- + company_id : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCompanyCreditBalancesResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.credits.list_company_credit_balances( + company_id="company_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_company_credit_balances( + company_id=company_id, request_options=request_options + ) + return _response.data + async def list_credit_bundles( self, *, @@ -3120,6 +3211,7 @@ async def list_billing_plan_credit_grants( plan_id: typing.Optional[str] = None, plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_version_id: typing.Optional[str] = None, + plan_version_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, @@ -3137,6 +3229,8 @@ async def list_billing_plan_credit_grants( plan_version_id : typing.Optional[str] + plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + limit : typing.Optional[int] Page limit (default 100) @@ -3169,6 +3263,7 @@ async def main() -> None: plan_id="plan_id", plan_ids=["plan_ids"], plan_version_id="plan_version_id", + plan_version_ids=["plan_version_ids"], limit=1000000, offset=1000000, ) @@ -3182,6 +3277,7 @@ async def main() -> None: plan_id=plan_id, plan_ids=plan_ids, plan_version_id=plan_version_id, + plan_version_ids=plan_version_ids, limit=limit, offset=offset, request_options=request_options, @@ -3203,6 +3299,7 @@ async def create_billing_plan_credit_grant( auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT, auto_topup_expiry_unit_count: typing.Optional[int] = OMIT, + auto_topup_self_service: typing.Optional[bool] = OMIT, auto_topup_threshold_credits: typing.Optional[int] = OMIT, auto_topup_threshold_percent: typing.Optional[int] = OMIT, expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, @@ -3239,6 +3336,8 @@ async def create_billing_plan_credit_grant( auto_topup_expiry_unit_count : typing.Optional[int] + auto_topup_self_service : typing.Optional[bool] + auto_topup_threshold_credits : typing.Optional[int] auto_topup_threshold_percent : typing.Optional[int] @@ -3297,6 +3396,7 @@ async def main() -> None: auto_topup_expiry_type=auto_topup_expiry_type, auto_topup_expiry_unit=auto_topup_expiry_unit, auto_topup_expiry_unit_count=auto_topup_expiry_unit_count, + auto_topup_self_service=auto_topup_self_service, auto_topup_threshold_credits=auto_topup_threshold_credits, auto_topup_threshold_percent=auto_topup_threshold_percent, expiry_type=expiry_type, @@ -3362,6 +3462,7 @@ async def update_billing_plan_credit_grant( auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT, auto_topup_expiry_unit_count: typing.Optional[int] = OMIT, + auto_topup_self_service: typing.Optional[bool] = OMIT, auto_topup_threshold_credits: typing.Optional[int] = OMIT, auto_topup_threshold_percent: typing.Optional[int] = OMIT, credit_amount: typing.Optional[int] = OMIT, @@ -3395,6 +3496,8 @@ async def update_billing_plan_credit_grant( auto_topup_expiry_unit_count : typing.Optional[int] + auto_topup_self_service : typing.Optional[bool] + auto_topup_threshold_credits : typing.Optional[int] auto_topup_threshold_percent : typing.Optional[int] @@ -3449,6 +3552,7 @@ async def main() -> None: auto_topup_expiry_type=auto_topup_expiry_type, auto_topup_expiry_unit=auto_topup_expiry_unit, auto_topup_expiry_unit_count=auto_topup_expiry_unit_count, + auto_topup_self_service=auto_topup_self_service, auto_topup_threshold_credits=auto_topup_threshold_credits, auto_topup_threshold_percent=auto_topup_threshold_percent, credit_amount=credit_amount, @@ -3516,6 +3620,7 @@ async def count_billing_plan_credit_grants( plan_id: typing.Optional[str] = None, plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_version_id: typing.Optional[str] = None, + plan_version_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, @@ -3533,6 +3638,8 @@ async def count_billing_plan_credit_grants( plan_version_id : typing.Optional[str] + plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + limit : typing.Optional[int] Page limit (default 100) @@ -3565,6 +3672,7 @@ async def main() -> None: plan_id="plan_id", plan_ids=["plan_ids"], plan_version_id="plan_version_id", + plan_version_ids=["plan_version_ids"], limit=1000000, offset=1000000, ) @@ -3578,6 +3686,7 @@ async def main() -> None: plan_id=plan_id, plan_ids=plan_ids, plan_version_id=plan_version_id, + plan_version_ids=plan_version_ids, limit=limit, offset=offset, request_options=request_options, diff --git a/src/schematic/credits/raw_client.py b/src/schematic/credits/raw_client.py index 13165e0..e745709 100644 --- a/src/schematic/credits/raw_client.py +++ b/src/schematic/credits/raw_client.py @@ -55,6 +55,7 @@ from .types.grant_billing_credits_to_company_response import GrantBillingCreditsToCompanyResponse from .types.list_billing_credits_response import ListBillingCreditsResponse from .types.list_billing_plan_credit_grants_response import ListBillingPlanCreditGrantsResponse +from .types.list_company_credit_balances_response import ListCompanyCreditBalancesResponse from .types.list_company_grants_response import ListCompanyGrantsResponse from .types.list_credit_bundles_response import ListCreditBundlesResponse from .types.list_credit_event_ledger_response import ListCreditEventLedgerResponse @@ -704,6 +705,108 @@ def soft_delete_billing_credit( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def list_company_credit_balances( + self, *, company_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ListCompanyCreditBalancesResponse]: + """ + Parameters + ---------- + company_id : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListCompanyCreditBalancesResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "billing/credits/balance", + method="GET", + params={ + "company_id": company_id, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCompanyCreditBalancesResponse, + parse_obj_as( + type_=ListCompanyCreditBalancesResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + def list_credit_bundles( self, *, @@ -2600,6 +2703,7 @@ def list_billing_plan_credit_grants( plan_id: typing.Optional[str] = None, plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_version_id: typing.Optional[str] = None, + plan_version_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, @@ -2617,6 +2721,8 @@ def list_billing_plan_credit_grants( plan_version_id : typing.Optional[str] + plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + limit : typing.Optional[int] Page limit (default 100) @@ -2640,6 +2746,7 @@ def list_billing_plan_credit_grants( "plan_id": plan_id, "plan_ids": plan_ids, "plan_version_id": plan_version_id, + "plan_version_ids": plan_version_ids, "limit": limit, "offset": offset, }, @@ -2738,6 +2845,7 @@ def create_billing_plan_credit_grant( auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT, auto_topup_expiry_unit_count: typing.Optional[int] = OMIT, + auto_topup_self_service: typing.Optional[bool] = OMIT, auto_topup_threshold_credits: typing.Optional[int] = OMIT, auto_topup_threshold_percent: typing.Optional[int] = OMIT, expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, @@ -2774,6 +2882,8 @@ def create_billing_plan_credit_grant( auto_topup_expiry_unit_count : typing.Optional[int] + auto_topup_self_service : typing.Optional[bool] + auto_topup_threshold_credits : typing.Optional[int] auto_topup_threshold_percent : typing.Optional[int] @@ -2807,6 +2917,7 @@ def create_billing_plan_credit_grant( "auto_topup_expiry_type": auto_topup_expiry_type, "auto_topup_expiry_unit": auto_topup_expiry_unit, "auto_topup_expiry_unit_count": auto_topup_expiry_unit_count, + "auto_topup_self_service": auto_topup_self_service, "auto_topup_threshold_credits": auto_topup_threshold_credits, "auto_topup_threshold_percent": auto_topup_threshold_percent, "credit_amount": credit_amount, @@ -3006,6 +3117,7 @@ def update_billing_plan_credit_grant( auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT, auto_topup_expiry_unit_count: typing.Optional[int] = OMIT, + auto_topup_self_service: typing.Optional[bool] = OMIT, auto_topup_threshold_credits: typing.Optional[int] = OMIT, auto_topup_threshold_percent: typing.Optional[int] = OMIT, credit_amount: typing.Optional[int] = OMIT, @@ -3039,6 +3151,8 @@ def update_billing_plan_credit_grant( auto_topup_expiry_unit_count : typing.Optional[int] + auto_topup_self_service : typing.Optional[bool] + auto_topup_threshold_credits : typing.Optional[int] auto_topup_threshold_percent : typing.Optional[int] @@ -3072,6 +3186,7 @@ def update_billing_plan_credit_grant( "auto_topup_expiry_type": auto_topup_expiry_type, "auto_topup_expiry_unit": auto_topup_expiry_unit, "auto_topup_expiry_unit_count": auto_topup_expiry_unit_count, + "auto_topup_self_service": auto_topup_self_service, "auto_topup_threshold_credits": auto_topup_threshold_credits, "auto_topup_threshold_percent": auto_topup_threshold_percent, "credit_amount": credit_amount, @@ -3283,6 +3398,7 @@ def count_billing_plan_credit_grants( plan_id: typing.Optional[str] = None, plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_version_id: typing.Optional[str] = None, + plan_version_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, @@ -3300,6 +3416,8 @@ def count_billing_plan_credit_grants( plan_version_id : typing.Optional[str] + plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + limit : typing.Optional[int] Page limit (default 100) @@ -3323,6 +3441,7 @@ def count_billing_plan_credit_grants( "plan_id": plan_id, "plan_ids": plan_ids, "plan_version_id": plan_version_id, + "plan_version_ids": plan_version_ids, "limit": limit, "offset": offset, }, @@ -4311,6 +4430,108 @@ async def soft_delete_billing_credit( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + async def list_company_credit_balances( + self, *, company_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ListCompanyCreditBalancesResponse]: + """ + Parameters + ---------- + company_id : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListCompanyCreditBalancesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "billing/credits/balance", + method="GET", + params={ + "company_id": company_id, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCompanyCreditBalancesResponse, + parse_obj_as( + type_=ListCompanyCreditBalancesResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + async def list_credit_bundles( self, *, @@ -6207,6 +6428,7 @@ async def list_billing_plan_credit_grants( plan_id: typing.Optional[str] = None, plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_version_id: typing.Optional[str] = None, + plan_version_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, @@ -6224,6 +6446,8 @@ async def list_billing_plan_credit_grants( plan_version_id : typing.Optional[str] + plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + limit : typing.Optional[int] Page limit (default 100) @@ -6247,6 +6471,7 @@ async def list_billing_plan_credit_grants( "plan_id": plan_id, "plan_ids": plan_ids, "plan_version_id": plan_version_id, + "plan_version_ids": plan_version_ids, "limit": limit, "offset": offset, }, @@ -6345,6 +6570,7 @@ async def create_billing_plan_credit_grant( auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT, auto_topup_expiry_unit_count: typing.Optional[int] = OMIT, + auto_topup_self_service: typing.Optional[bool] = OMIT, auto_topup_threshold_credits: typing.Optional[int] = OMIT, auto_topup_threshold_percent: typing.Optional[int] = OMIT, expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, @@ -6381,6 +6607,8 @@ async def create_billing_plan_credit_grant( auto_topup_expiry_unit_count : typing.Optional[int] + auto_topup_self_service : typing.Optional[bool] + auto_topup_threshold_credits : typing.Optional[int] auto_topup_threshold_percent : typing.Optional[int] @@ -6414,6 +6642,7 @@ async def create_billing_plan_credit_grant( "auto_topup_expiry_type": auto_topup_expiry_type, "auto_topup_expiry_unit": auto_topup_expiry_unit, "auto_topup_expiry_unit_count": auto_topup_expiry_unit_count, + "auto_topup_self_service": auto_topup_self_service, "auto_topup_threshold_credits": auto_topup_threshold_credits, "auto_topup_threshold_percent": auto_topup_threshold_percent, "credit_amount": credit_amount, @@ -6613,6 +6842,7 @@ async def update_billing_plan_credit_grant( auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT, auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT, auto_topup_expiry_unit_count: typing.Optional[int] = OMIT, + auto_topup_self_service: typing.Optional[bool] = OMIT, auto_topup_threshold_credits: typing.Optional[int] = OMIT, auto_topup_threshold_percent: typing.Optional[int] = OMIT, credit_amount: typing.Optional[int] = OMIT, @@ -6646,6 +6876,8 @@ async def update_billing_plan_credit_grant( auto_topup_expiry_unit_count : typing.Optional[int] + auto_topup_self_service : typing.Optional[bool] + auto_topup_threshold_credits : typing.Optional[int] auto_topup_threshold_percent : typing.Optional[int] @@ -6679,6 +6911,7 @@ async def update_billing_plan_credit_grant( "auto_topup_expiry_type": auto_topup_expiry_type, "auto_topup_expiry_unit": auto_topup_expiry_unit, "auto_topup_expiry_unit_count": auto_topup_expiry_unit_count, + "auto_topup_self_service": auto_topup_self_service, "auto_topup_threshold_credits": auto_topup_threshold_credits, "auto_topup_threshold_percent": auto_topup_threshold_percent, "credit_amount": credit_amount, @@ -6890,6 +7123,7 @@ async def count_billing_plan_credit_grants( plan_id: typing.Optional[str] = None, plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, plan_version_id: typing.Optional[str] = None, + plan_version_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, @@ -6907,6 +7141,8 @@ async def count_billing_plan_credit_grants( plan_version_id : typing.Optional[str] + plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + limit : typing.Optional[int] Page limit (default 100) @@ -6930,6 +7166,7 @@ async def count_billing_plan_credit_grants( "plan_id": plan_id, "plan_ids": plan_ids, "plan_version_id": plan_version_id, + "plan_version_ids": plan_version_ids, "limit": limit, "offset": offset, }, diff --git a/src/schematic/credits/types/__init__.py b/src/schematic/credits/types/__init__.py index f83605b..d06f5e9 100644 --- a/src/schematic/credits/types/__init__.py +++ b/src/schematic/credits/types/__init__.py @@ -36,6 +36,8 @@ from .list_billing_credits_response import ListBillingCreditsResponse from .list_billing_plan_credit_grants_params import ListBillingPlanCreditGrantsParams from .list_billing_plan_credit_grants_response import ListBillingPlanCreditGrantsResponse + from .list_company_credit_balances_params import ListCompanyCreditBalancesParams + from .list_company_credit_balances_response import ListCompanyCreditBalancesResponse from .list_company_grants_params import ListCompanyGrantsParams from .list_company_grants_response import ListCompanyGrantsResponse from .list_credit_bundles_params import ListCreditBundlesParams @@ -80,6 +82,8 @@ "ListBillingCreditsResponse": ".list_billing_credits_response", "ListBillingPlanCreditGrantsParams": ".list_billing_plan_credit_grants_params", "ListBillingPlanCreditGrantsResponse": ".list_billing_plan_credit_grants_response", + "ListCompanyCreditBalancesParams": ".list_company_credit_balances_params", + "ListCompanyCreditBalancesResponse": ".list_company_credit_balances_response", "ListCompanyGrantsParams": ".list_company_grants_params", "ListCompanyGrantsResponse": ".list_company_grants_response", "ListCreditBundlesParams": ".list_credit_bundles_params", @@ -148,6 +152,8 @@ def __dir__(): "ListBillingCreditsResponse", "ListBillingPlanCreditGrantsParams", "ListBillingPlanCreditGrantsResponse", + "ListCompanyCreditBalancesParams", + "ListCompanyCreditBalancesResponse", "ListCompanyGrantsParams", "ListCompanyGrantsResponse", "ListCreditBundlesParams", diff --git a/src/schematic/credits/types/count_billing_plan_credit_grants_params.py b/src/schematic/credits/types/count_billing_plan_credit_grants_params.py index 4cca569..00d4421 100644 --- a/src/schematic/credits/types/count_billing_plan_credit_grants_params.py +++ b/src/schematic/credits/types/count_billing_plan_credit_grants_params.py @@ -26,6 +26,7 @@ class CountBillingPlanCreditGrantsParams(UniversalBaseModel): plan_id: typing.Optional[str] = None plan_ids: typing.Optional[typing.List[str]] = None plan_version_id: typing.Optional[str] = None + plan_version_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/credits/types/list_billing_plan_credit_grants_params.py b/src/schematic/credits/types/list_billing_plan_credit_grants_params.py index 6c1a67b..2eed56d 100644 --- a/src/schematic/credits/types/list_billing_plan_credit_grants_params.py +++ b/src/schematic/credits/types/list_billing_plan_credit_grants_params.py @@ -26,6 +26,7 @@ class ListBillingPlanCreditGrantsParams(UniversalBaseModel): plan_id: typing.Optional[str] = None plan_ids: typing.Optional[typing.List[str]] = None plan_version_id: typing.Optional[str] = None + plan_version_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/credits/types/list_company_credit_balances_params.py b/src/schematic/credits/types/list_company_credit_balances_params.py new file mode 100644 index 0000000..c500b12 --- /dev/null +++ b/src/schematic/credits/types/list_company_credit_balances_params.py @@ -0,0 +1,23 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ListCompanyCreditBalancesParams(UniversalBaseModel): + """ + Input parameters + """ + + company_id: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/credits/types/list_company_credit_balances_response.py b/src/schematic/credits/types/list_company_credit_balances_response.py new file mode 100644 index 0000000..165fc51 --- /dev/null +++ b/src/schematic/credits/types/list_company_credit_balances_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.company_credit_balance_response_data import CompanyCreditBalanceResponseData +from .list_company_credit_balances_params import ListCompanyCreditBalancesParams + + +class ListCompanyCreditBalancesResponse(UniversalBaseModel): + data: typing.List[CompanyCreditBalanceResponseData] + params: ListCompanyCreditBalancesParams = 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/events/client.py b/src/schematic/events/client.py index 908afd8..4782084 100644 --- a/src/schematic/events/client.py +++ b/src/schematic/events/client.py @@ -128,6 +128,7 @@ def list_events( event_subtype: typing.Optional[str] = None, event_types: typing.Optional[typing.Union[EventType, typing.Sequence[EventType]]] = None, flag_id: typing.Optional[str] = None, + idempotency_key: typing.Optional[str] = None, user_id: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, @@ -144,6 +145,8 @@ def list_events( flag_id : typing.Optional[str] + idempotency_key : typing.Optional[str] + user_id : typing.Optional[str] limit : typing.Optional[int] @@ -172,6 +175,7 @@ def list_events( event_subtype="event_subtype", event_types=["flag_check"], flag_id="flag_id", + idempotency_key="idempotency_key", user_id="user_id", limit=1000000, offset=1000000, @@ -182,6 +186,7 @@ def list_events( event_subtype=event_subtype, event_types=event_types, flag_id=flag_id, + idempotency_key=idempotency_key, user_id=user_id, limit=limit, offset=offset, @@ -194,6 +199,7 @@ def create_event( *, event_type: EventType, body: typing.Optional[EventBody] = OMIT, + idempotency_key: typing.Optional[str] = OMIT, sent_at: typing.Optional[dt.datetime] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> CreateEventResponse: @@ -205,6 +211,9 @@ def create_event( body : typing.Optional[EventBody] + idempotency_key : typing.Optional[str] + Optional client-supplied key. Duplicate events with the same key (scoped to the environment) are dropped for 24h. + sent_at : typing.Optional[dt.datetime] Optionally provide a timestamp at which the event was sent to Schematic @@ -228,7 +237,11 @@ def create_event( ) """ _response = self._raw_client.create_event( - event_type=event_type, body=body, sent_at=sent_at, request_options=request_options + event_type=event_type, + body=body, + idempotency_key=idempotency_key, + sent_at=sent_at, + request_options=request_options, ) return _response.data @@ -412,6 +425,7 @@ async def list_events( event_subtype: typing.Optional[str] = None, event_types: typing.Optional[typing.Union[EventType, typing.Sequence[EventType]]] = None, flag_id: typing.Optional[str] = None, + idempotency_key: typing.Optional[str] = None, user_id: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, @@ -428,6 +442,8 @@ async def list_events( flag_id : typing.Optional[str] + idempotency_key : typing.Optional[str] + user_id : typing.Optional[str] limit : typing.Optional[int] @@ -461,6 +477,7 @@ async def main() -> None: event_subtype="event_subtype", event_types=["flag_check"], flag_id="flag_id", + idempotency_key="idempotency_key", user_id="user_id", limit=1000000, offset=1000000, @@ -474,6 +491,7 @@ async def main() -> None: event_subtype=event_subtype, event_types=event_types, flag_id=flag_id, + idempotency_key=idempotency_key, user_id=user_id, limit=limit, offset=offset, @@ -486,6 +504,7 @@ async def create_event( *, event_type: EventType, body: typing.Optional[EventBody] = OMIT, + idempotency_key: typing.Optional[str] = OMIT, sent_at: typing.Optional[dt.datetime] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> CreateEventResponse: @@ -497,6 +516,9 @@ async def create_event( body : typing.Optional[EventBody] + idempotency_key : typing.Optional[str] + Optional client-supplied key. Duplicate events with the same key (scoped to the environment) are dropped for 24h. + sent_at : typing.Optional[dt.datetime] Optionally provide a timestamp at which the event was sent to Schematic @@ -528,7 +550,11 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.create_event( - event_type=event_type, body=body, sent_at=sent_at, request_options=request_options + event_type=event_type, + body=body, + idempotency_key=idempotency_key, + sent_at=sent_at, + request_options=request_options, ) return _response.data diff --git a/src/schematic/events/raw_client.py b/src/schematic/events/raw_client.py index bcc8153..2324805 100644 --- a/src/schematic/events/raw_client.py +++ b/src/schematic/events/raw_client.py @@ -274,6 +274,7 @@ def list_events( event_subtype: typing.Optional[str] = None, event_types: typing.Optional[typing.Union[EventType, typing.Sequence[EventType]]] = None, flag_id: typing.Optional[str] = None, + idempotency_key: typing.Optional[str] = None, user_id: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, @@ -290,6 +291,8 @@ def list_events( flag_id : typing.Optional[str] + idempotency_key : typing.Optional[str] + user_id : typing.Optional[str] limit : typing.Optional[int] @@ -314,6 +317,7 @@ def list_events( "event_subtype": event_subtype, "event_types": event_types, "flag_id": flag_id, + "idempotency_key": idempotency_key, "user_id": user_id, "limit": limit, "offset": offset, @@ -403,6 +407,7 @@ def create_event( *, event_type: EventType, body: typing.Optional[EventBody] = OMIT, + idempotency_key: typing.Optional[str] = OMIT, sent_at: typing.Optional[dt.datetime] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[CreateEventResponse]: @@ -414,6 +419,9 @@ def create_event( body : typing.Optional[EventBody] + idempotency_key : typing.Optional[str] + Optional client-supplied key. Duplicate events with the same key (scoped to the environment) are dropped for 24h. + sent_at : typing.Optional[dt.datetime] Optionally provide a timestamp at which the event was sent to Schematic @@ -431,6 +439,7 @@ def create_event( json={ "body": convert_and_respect_annotation_metadata(object_=body, annotation=EventBody, direction="write"), "event_type": event_type, + "idempotency_key": idempotency_key, "sent_at": sent_at, }, headers={ @@ -934,6 +943,7 @@ async def list_events( event_subtype: typing.Optional[str] = None, event_types: typing.Optional[typing.Union[EventType, typing.Sequence[EventType]]] = None, flag_id: typing.Optional[str] = None, + idempotency_key: typing.Optional[str] = None, user_id: typing.Optional[str] = None, limit: typing.Optional[int] = None, offset: typing.Optional[int] = None, @@ -950,6 +960,8 @@ async def list_events( flag_id : typing.Optional[str] + idempotency_key : typing.Optional[str] + user_id : typing.Optional[str] limit : typing.Optional[int] @@ -974,6 +986,7 @@ async def list_events( "event_subtype": event_subtype, "event_types": event_types, "flag_id": flag_id, + "idempotency_key": idempotency_key, "user_id": user_id, "limit": limit, "offset": offset, @@ -1063,6 +1076,7 @@ async def create_event( *, event_type: EventType, body: typing.Optional[EventBody] = OMIT, + idempotency_key: typing.Optional[str] = OMIT, sent_at: typing.Optional[dt.datetime] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[CreateEventResponse]: @@ -1074,6 +1088,9 @@ async def create_event( body : typing.Optional[EventBody] + idempotency_key : typing.Optional[str] + Optional client-supplied key. Duplicate events with the same key (scoped to the environment) are dropped for 24h. + sent_at : typing.Optional[dt.datetime] Optionally provide a timestamp at which the event was sent to Schematic @@ -1091,6 +1108,7 @@ async def create_event( json={ "body": convert_and_respect_annotation_metadata(object_=body, annotation=EventBody, direction="write"), "event_type": event_type, + "idempotency_key": idempotency_key, "sent_at": sent_at, }, headers={ diff --git a/src/schematic/events/types/list_events_params.py b/src/schematic/events/types/list_events_params.py index 1667c88..b19676e 100644 --- a/src/schematic/events/types/list_events_params.py +++ b/src/schematic/events/types/list_events_params.py @@ -16,6 +16,7 @@ class ListEventsParams(UniversalBaseModel): event_subtype: typing.Optional[str] = None event_types: typing.Optional[typing.List[EventType]] = None flag_id: typing.Optional[str] = None + idempotency_key: typing.Optional[str] = None limit: typing.Optional[int] = pydantic.Field(default=None) """ Page limit (default 100) diff --git a/src/schematic/features/client.py b/src/schematic/features/client.py index d8a6be2..8f8cffc 100644 --- a/src/schematic/features/client.py +++ b/src/schematic/features/client.py @@ -54,6 +54,7 @@ def list_features( boolean_require_event: typing.Optional[bool] = None, feature_type: typing.Optional[typing.Union[FeatureType, typing.Sequence[FeatureType]]] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + managed_by: typing.Optional[BillingProviderType] = None, plan_version_id: typing.Optional[str] = None, q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, @@ -73,6 +74,9 @@ def list_features( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + managed_by : typing.Optional[BillingProviderType] + Filter for features managed by a billing provider, or by Schematic (no billing provider) + plan_version_id : typing.Optional[str] Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used @@ -110,6 +114,7 @@ def list_features( boolean_require_event=True, feature_type=["boolean"], ids=["ids"], + managed_by="orb", plan_version_id="plan_version_id", q="q", without_company_override_for="without_company_override_for", @@ -122,6 +127,7 @@ def list_features( boolean_require_event=boolean_require_event, feature_type=feature_type, ids=ids, + managed_by=managed_by, plan_version_id=plan_version_id, q=q, without_company_override_for=without_company_override_for, @@ -447,6 +453,7 @@ def count_features( boolean_require_event: typing.Optional[bool] = None, feature_type: typing.Optional[typing.Union[FeatureType, typing.Sequence[FeatureType]]] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + managed_by: typing.Optional[BillingProviderType] = None, plan_version_id: typing.Optional[str] = None, q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, @@ -466,6 +473,9 @@ def count_features( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + managed_by : typing.Optional[BillingProviderType] + Filter for features managed by a billing provider, or by Schematic (no billing provider) + plan_version_id : typing.Optional[str] Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used @@ -503,6 +513,7 @@ def count_features( boolean_require_event=True, feature_type=["boolean"], ids=["ids"], + managed_by="orb", plan_version_id="plan_version_id", q="q", without_company_override_for="without_company_override_for", @@ -515,6 +526,7 @@ def count_features( boolean_require_event=boolean_require_event, feature_type=feature_type, ids=ids, + managed_by=managed_by, plan_version_id=plan_version_id, q=q, without_company_override_for=without_company_override_for, @@ -1013,6 +1025,7 @@ async def list_features( boolean_require_event: typing.Optional[bool] = None, feature_type: typing.Optional[typing.Union[FeatureType, typing.Sequence[FeatureType]]] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + managed_by: typing.Optional[BillingProviderType] = None, plan_version_id: typing.Optional[str] = None, q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, @@ -1032,6 +1045,9 @@ async def list_features( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + managed_by : typing.Optional[BillingProviderType] + Filter for features managed by a billing provider, or by Schematic (no billing provider) + plan_version_id : typing.Optional[str] Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used @@ -1074,6 +1090,7 @@ async def main() -> None: boolean_require_event=True, feature_type=["boolean"], ids=["ids"], + managed_by="orb", plan_version_id="plan_version_id", q="q", without_company_override_for="without_company_override_for", @@ -1089,6 +1106,7 @@ async def main() -> None: boolean_require_event=boolean_require_event, feature_type=feature_type, ids=ids, + managed_by=managed_by, plan_version_id=plan_version_id, q=q, without_company_override_for=without_company_override_for, @@ -1454,6 +1472,7 @@ async def count_features( boolean_require_event: typing.Optional[bool] = None, feature_type: typing.Optional[typing.Union[FeatureType, typing.Sequence[FeatureType]]] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + managed_by: typing.Optional[BillingProviderType] = None, plan_version_id: typing.Optional[str] = None, q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, @@ -1473,6 +1492,9 @@ async def count_features( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + managed_by : typing.Optional[BillingProviderType] + Filter for features managed by a billing provider, or by Schematic (no billing provider) + plan_version_id : typing.Optional[str] Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used @@ -1515,6 +1537,7 @@ async def main() -> None: boolean_require_event=True, feature_type=["boolean"], ids=["ids"], + managed_by="orb", plan_version_id="plan_version_id", q="q", without_company_override_for="without_company_override_for", @@ -1530,6 +1553,7 @@ async def main() -> None: boolean_require_event=boolean_require_event, feature_type=feature_type, ids=ids, + managed_by=managed_by, plan_version_id=plan_version_id, q=q, without_company_override_for=without_company_override_for, diff --git a/src/schematic/features/raw_client.py b/src/schematic/features/raw_client.py index 6b60fba..cd9e048 100644 --- a/src/schematic/features/raw_client.py +++ b/src/schematic/features/raw_client.py @@ -56,6 +56,7 @@ def list_features( boolean_require_event: typing.Optional[bool] = None, feature_type: typing.Optional[typing.Union[FeatureType, typing.Sequence[FeatureType]]] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + managed_by: typing.Optional[BillingProviderType] = None, plan_version_id: typing.Optional[str] = None, q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, @@ -75,6 +76,9 @@ def list_features( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + managed_by : typing.Optional[BillingProviderType] + Filter for features managed by a billing provider, or by Schematic (no billing provider) + plan_version_id : typing.Optional[str] Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used @@ -108,6 +112,7 @@ def list_features( "boolean_require_event": boolean_require_event, "feature_type": feature_type, "ids": ids, + "managed_by": managed_by, "plan_version_id": plan_version_id, "q": q, "without_company_override_for": without_company_override_for, @@ -855,6 +860,7 @@ def count_features( boolean_require_event: typing.Optional[bool] = None, feature_type: typing.Optional[typing.Union[FeatureType, typing.Sequence[FeatureType]]] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + managed_by: typing.Optional[BillingProviderType] = None, plan_version_id: typing.Optional[str] = None, q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, @@ -874,6 +880,9 @@ def count_features( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + managed_by : typing.Optional[BillingProviderType] + Filter for features managed by a billing provider, or by Schematic (no billing provider) + plan_version_id : typing.Optional[str] Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used @@ -907,6 +916,7 @@ def count_features( "boolean_require_event": boolean_require_event, "feature_type": feature_type, "ids": ids, + "managed_by": managed_by, "plan_version_id": plan_version_id, "q": q, "without_company_override_for": without_company_override_for, @@ -2162,6 +2172,7 @@ async def list_features( boolean_require_event: typing.Optional[bool] = None, feature_type: typing.Optional[typing.Union[FeatureType, typing.Sequence[FeatureType]]] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + managed_by: typing.Optional[BillingProviderType] = None, plan_version_id: typing.Optional[str] = None, q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, @@ -2181,6 +2192,9 @@ async def list_features( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + managed_by : typing.Optional[BillingProviderType] + Filter for features managed by a billing provider, or by Schematic (no billing provider) + plan_version_id : typing.Optional[str] Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used @@ -2214,6 +2228,7 @@ async def list_features( "boolean_require_event": boolean_require_event, "feature_type": feature_type, "ids": ids, + "managed_by": managed_by, "plan_version_id": plan_version_id, "q": q, "without_company_override_for": without_company_override_for, @@ -2961,6 +2976,7 @@ async def count_features( boolean_require_event: typing.Optional[bool] = None, feature_type: typing.Optional[typing.Union[FeatureType, typing.Sequence[FeatureType]]] = None, ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + managed_by: typing.Optional[BillingProviderType] = None, plan_version_id: typing.Optional[str] = None, q: typing.Optional[str] = None, without_company_override_for: typing.Optional[str] = None, @@ -2980,6 +2996,9 @@ async def count_features( ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + managed_by : typing.Optional[BillingProviderType] + Filter for features managed by a billing provider, or by Schematic (no billing provider) + plan_version_id : typing.Optional[str] Filter by plan version ID when used with without_plan_entitlement_for; if not provided, the latest published version is used @@ -3013,6 +3032,7 @@ async def count_features( "boolean_require_event": boolean_require_event, "feature_type": feature_type, "ids": ids, + "managed_by": managed_by, "plan_version_id": plan_version_id, "q": q, "without_company_override_for": without_company_override_for, diff --git a/src/schematic/features/types/count_features_params.py b/src/schematic/features/types/count_features_params.py index 2938333..74883e8 100644 --- a/src/schematic/features/types/count_features_params.py +++ b/src/schematic/features/types/count_features_params.py @@ -4,6 +4,7 @@ import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_provider_type import BillingProviderType from ...types.feature_type import FeatureType @@ -28,6 +29,11 @@ class CountFeaturesParams(UniversalBaseModel): Page limit (default 100) """ + managed_by: typing.Optional[BillingProviderType] = pydantic.Field(default=None) + """ + Filter for features managed by a billing provider, or by Schematic (no billing provider) + """ + offset: typing.Optional[int] = pydantic.Field(default=None) """ Page offset (default 0) diff --git a/src/schematic/features/types/list_features_params.py b/src/schematic/features/types/list_features_params.py index 1756467..df863c5 100644 --- a/src/schematic/features/types/list_features_params.py +++ b/src/schematic/features/types/list_features_params.py @@ -4,6 +4,7 @@ import pydantic from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.billing_provider_type import BillingProviderType from ...types.feature_type import FeatureType @@ -28,6 +29,11 @@ class ListFeaturesParams(UniversalBaseModel): Page limit (default 100) """ + managed_by: typing.Optional[BillingProviderType] = pydantic.Field(default=None) + """ + Filter for features managed by a billing provider, or by Schematic (no billing provider) + """ + offset: typing.Optional[int] = pydantic.Field(default=None) """ Page offset (default 0) diff --git a/src/schematic/insights/__init__.py b/src/schematic/insights/__init__.py new file mode 100644 index 0000000..08da82c --- /dev/null +++ b/src/schematic/insights/__init__.py @@ -0,0 +1,70 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + +import typing +from importlib import import_module + +if typing.TYPE_CHECKING: + from .types import ( + GetActivityParams, + GetActivityResponse, + GetEnvironmentFeatureUsageTimeSeriesParams, + GetEnvironmentFeatureUsageTimeSeriesResponse, + GetEnvironmentTraitUsageTimeSeriesParams, + GetEnvironmentTraitUsageTimeSeriesResponse, + GetPlanGrowthParams, + GetPlanGrowthResponse, + GetSummaryResponse, + GetTopFeaturesByUsageParams, + GetTopFeaturesByUsageResponse, + ) +_dynamic_imports: typing.Dict[str, str] = { + "GetActivityParams": ".types", + "GetActivityResponse": ".types", + "GetEnvironmentFeatureUsageTimeSeriesParams": ".types", + "GetEnvironmentFeatureUsageTimeSeriesResponse": ".types", + "GetEnvironmentTraitUsageTimeSeriesParams": ".types", + "GetEnvironmentTraitUsageTimeSeriesResponse": ".types", + "GetPlanGrowthParams": ".types", + "GetPlanGrowthResponse": ".types", + "GetSummaryResponse": ".types", + "GetTopFeaturesByUsageParams": ".types", + "GetTopFeaturesByUsageResponse": ".types", +} + + +def __getattr__(attr_name: str) -> typing.Any: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") + try: + module = import_module(module_name, __package__) + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) + except ImportError as e: + raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e + except AttributeError as e: + raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e + + +def __dir__(): + lazy_attrs = list(_dynamic_imports.keys()) + return sorted(lazy_attrs) + + +__all__ = [ + "GetActivityParams", + "GetActivityResponse", + "GetEnvironmentFeatureUsageTimeSeriesParams", + "GetEnvironmentFeatureUsageTimeSeriesResponse", + "GetEnvironmentTraitUsageTimeSeriesParams", + "GetEnvironmentTraitUsageTimeSeriesResponse", + "GetPlanGrowthParams", + "GetPlanGrowthResponse", + "GetSummaryResponse", + "GetTopFeaturesByUsageParams", + "GetTopFeaturesByUsageResponse", +] diff --git a/src/schematic/insights/client.py b/src/schematic/insights/client.py new file mode 100644 index 0000000..586db67 --- /dev/null +++ b/src/schematic/insights/client.py @@ -0,0 +1,586 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from ..types.time_series_granularity import TimeSeriesGranularity +from .raw_client import AsyncRawInsightsClient, RawInsightsClient +from .types.get_activity_response import GetActivityResponse +from .types.get_environment_feature_usage_time_series_response import GetEnvironmentFeatureUsageTimeSeriesResponse +from .types.get_environment_trait_usage_time_series_response import GetEnvironmentTraitUsageTimeSeriesResponse +from .types.get_plan_growth_response import GetPlanGrowthResponse +from .types.get_summary_response import GetSummaryResponse +from .types.get_top_features_by_usage_response import GetTopFeaturesByUsageResponse + + +class InsightsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawInsightsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawInsightsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawInsightsClient + """ + return self._raw_client + + def get_activity( + self, *, limit: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> GetActivityResponse: + """ + Parameters + ---------- + limit : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetActivityResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.insights.get_activity( + limit=1000000, + ) + """ + _response = self._raw_client.get_activity(limit=limit, request_options=request_options) + return _response.data + + def get_environment_feature_usage_time_series( + self, + *, + end_time: dt.datetime, + feature_id: str, + start_time: dt.datetime, + granularity: typing.Optional[TimeSeriesGranularity] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> GetEnvironmentFeatureUsageTimeSeriesResponse: + """ + Parameters + ---------- + end_time : dt.datetime + + feature_id : str + + start_time : dt.datetime + + granularity : typing.Optional[TimeSeriesGranularity] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetEnvironmentFeatureUsageTimeSeriesResponse + OK + + Examples + -------- + import datetime + + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.insights.get_environment_feature_usage_time_series( + end_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + feature_id="feature_id", + granularity="daily", + start_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + ) + """ + _response = self._raw_client.get_environment_feature_usage_time_series( + end_time=end_time, + feature_id=feature_id, + start_time=start_time, + granularity=granularity, + request_options=request_options, + ) + return _response.data + + def get_plan_growth( + self, *, months: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> GetPlanGrowthResponse: + """ + Parameters + ---------- + months : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetPlanGrowthResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.insights.get_plan_growth( + months=1000000, + ) + """ + _response = self._raw_client.get_plan_growth(months=months, request_options=request_options) + return _response.data + + def get_summary(self, *, request_options: typing.Optional[RequestOptions] = None) -> GetSummaryResponse: + """ + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetSummaryResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.insights.get_summary() + """ + _response = self._raw_client.get_summary(request_options=request_options) + return _response.data + + def get_top_features_by_usage( + self, + *, + end_time: dt.datetime, + start_time: dt.datetime, + limit: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> GetTopFeaturesByUsageResponse: + """ + Parameters + ---------- + end_time : dt.datetime + + start_time : dt.datetime + + limit : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetTopFeaturesByUsageResponse + OK + + Examples + -------- + import datetime + + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.insights.get_top_features_by_usage( + end_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + limit=1000000, + start_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + ) + """ + _response = self._raw_client.get_top_features_by_usage( + end_time=end_time, start_time=start_time, limit=limit, request_options=request_options + ) + return _response.data + + def get_environment_trait_usage_time_series( + self, + *, + end_time: dt.datetime, + feature_id: str, + start_time: dt.datetime, + granularity: typing.Optional[TimeSeriesGranularity] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> GetEnvironmentTraitUsageTimeSeriesResponse: + """ + Parameters + ---------- + end_time : dt.datetime + + feature_id : str + + start_time : dt.datetime + + granularity : typing.Optional[TimeSeriesGranularity] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetEnvironmentTraitUsageTimeSeriesResponse + OK + + Examples + -------- + import datetime + + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.insights.get_environment_trait_usage_time_series( + end_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + feature_id="feature_id", + granularity="daily", + start_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + ) + """ + _response = self._raw_client.get_environment_trait_usage_time_series( + end_time=end_time, + feature_id=feature_id, + start_time=start_time, + granularity=granularity, + request_options=request_options, + ) + return _response.data + + +class AsyncInsightsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawInsightsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawInsightsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawInsightsClient + """ + return self._raw_client + + async def get_activity( + self, *, limit: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> GetActivityResponse: + """ + Parameters + ---------- + limit : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetActivityResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.insights.get_activity( + limit=1000000, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_activity(limit=limit, request_options=request_options) + return _response.data + + async def get_environment_feature_usage_time_series( + self, + *, + end_time: dt.datetime, + feature_id: str, + start_time: dt.datetime, + granularity: typing.Optional[TimeSeriesGranularity] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> GetEnvironmentFeatureUsageTimeSeriesResponse: + """ + Parameters + ---------- + end_time : dt.datetime + + feature_id : str + + start_time : dt.datetime + + granularity : typing.Optional[TimeSeriesGranularity] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetEnvironmentFeatureUsageTimeSeriesResponse + OK + + Examples + -------- + import asyncio + import datetime + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.insights.get_environment_feature_usage_time_series( + end_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + feature_id="feature_id", + granularity="daily", + start_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_environment_feature_usage_time_series( + end_time=end_time, + feature_id=feature_id, + start_time=start_time, + granularity=granularity, + request_options=request_options, + ) + return _response.data + + async def get_plan_growth( + self, *, months: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> GetPlanGrowthResponse: + """ + Parameters + ---------- + months : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetPlanGrowthResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.insights.get_plan_growth( + months=1000000, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_plan_growth(months=months, request_options=request_options) + return _response.data + + async def get_summary(self, *, request_options: typing.Optional[RequestOptions] = None) -> GetSummaryResponse: + """ + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetSummaryResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.insights.get_summary() + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_summary(request_options=request_options) + return _response.data + + async def get_top_features_by_usage( + self, + *, + end_time: dt.datetime, + start_time: dt.datetime, + limit: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> GetTopFeaturesByUsageResponse: + """ + Parameters + ---------- + end_time : dt.datetime + + start_time : dt.datetime + + limit : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetTopFeaturesByUsageResponse + OK + + Examples + -------- + import asyncio + import datetime + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.insights.get_top_features_by_usage( + end_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + limit=1000000, + start_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_top_features_by_usage( + end_time=end_time, start_time=start_time, limit=limit, request_options=request_options + ) + return _response.data + + async def get_environment_trait_usage_time_series( + self, + *, + end_time: dt.datetime, + feature_id: str, + start_time: dt.datetime, + granularity: typing.Optional[TimeSeriesGranularity] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> GetEnvironmentTraitUsageTimeSeriesResponse: + """ + Parameters + ---------- + end_time : dt.datetime + + feature_id : str + + start_time : dt.datetime + + granularity : typing.Optional[TimeSeriesGranularity] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetEnvironmentTraitUsageTimeSeriesResponse + OK + + Examples + -------- + import asyncio + import datetime + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.insights.get_environment_trait_usage_time_series( + end_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + feature_id="feature_id", + granularity="daily", + start_time=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_environment_trait_usage_time_series( + end_time=end_time, + feature_id=feature_id, + start_time=start_time, + granularity=granularity, + request_options=request_options, + ) + return _response.data diff --git a/src/schematic/insights/raw_client.py b/src/schematic/insights/raw_client.py new file mode 100644 index 0000000..44f4256 --- /dev/null +++ b/src/schematic/insights/raw_client.py @@ -0,0 +1,1200 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError as core_api_error_ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.datetime_utils import serialize_datetime +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.parse_error import ParsingError +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions +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.time_series_granularity import TimeSeriesGranularity +from .types.get_activity_response import GetActivityResponse +from .types.get_environment_feature_usage_time_series_response import GetEnvironmentFeatureUsageTimeSeriesResponse +from .types.get_environment_trait_usage_time_series_response import GetEnvironmentTraitUsageTimeSeriesResponse +from .types.get_plan_growth_response import GetPlanGrowthResponse +from .types.get_summary_response import GetSummaryResponse +from .types.get_top_features_by_usage_response import GetTopFeaturesByUsageResponse +from pydantic import ValidationError + + +class RawInsightsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def get_activity( + self, *, limit: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetActivityResponse]: + """ + Parameters + ---------- + limit : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetActivityResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "insights/activity", + method="GET", + params={ + "limit": limit, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetActivityResponse, + parse_obj_as( + type_=GetActivityResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_environment_feature_usage_time_series( + self, + *, + end_time: dt.datetime, + feature_id: str, + start_time: dt.datetime, + granularity: typing.Optional[TimeSeriesGranularity] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[GetEnvironmentFeatureUsageTimeSeriesResponse]: + """ + Parameters + ---------- + end_time : dt.datetime + + feature_id : str + + start_time : dt.datetime + + granularity : typing.Optional[TimeSeriesGranularity] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetEnvironmentFeatureUsageTimeSeriesResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "insights/feature-usage-timeseries", + method="GET", + params={ + "end_time": serialize_datetime(end_time), + "feature_id": feature_id, + "granularity": granularity, + "start_time": serialize_datetime(start_time), + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetEnvironmentFeatureUsageTimeSeriesResponse, + parse_obj_as( + type_=GetEnvironmentFeatureUsageTimeSeriesResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_plan_growth( + self, *, months: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetPlanGrowthResponse]: + """ + Parameters + ---------- + months : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetPlanGrowthResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "insights/plan-growth", + method="GET", + params={ + "months": months, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetPlanGrowthResponse, + parse_obj_as( + type_=GetPlanGrowthResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_summary( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetSummaryResponse]: + """ + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetSummaryResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "insights/summary", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetSummaryResponse, + parse_obj_as( + type_=GetSummaryResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_top_features_by_usage( + self, + *, + end_time: dt.datetime, + start_time: dt.datetime, + limit: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[GetTopFeaturesByUsageResponse]: + """ + Parameters + ---------- + end_time : dt.datetime + + start_time : dt.datetime + + limit : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetTopFeaturesByUsageResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "insights/top-features", + method="GET", + params={ + "end_time": serialize_datetime(end_time), + "limit": limit, + "start_time": serialize_datetime(start_time), + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetTopFeaturesByUsageResponse, + parse_obj_as( + type_=GetTopFeaturesByUsageResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_environment_trait_usage_time_series( + self, + *, + end_time: dt.datetime, + feature_id: str, + start_time: dt.datetime, + granularity: typing.Optional[TimeSeriesGranularity] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[GetEnvironmentTraitUsageTimeSeriesResponse]: + """ + Parameters + ---------- + end_time : dt.datetime + + feature_id : str + + start_time : dt.datetime + + granularity : typing.Optional[TimeSeriesGranularity] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetEnvironmentTraitUsageTimeSeriesResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "insights/trait-usage-timeseries", + method="GET", + params={ + "end_time": serialize_datetime(end_time), + "feature_id": feature_id, + "granularity": granularity, + "start_time": serialize_datetime(start_time), + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetEnvironmentTraitUsageTimeSeriesResponse, + parse_obj_as( + type_=GetEnvironmentTraitUsageTimeSeriesResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + +class AsyncRawInsightsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def get_activity( + self, *, limit: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetActivityResponse]: + """ + Parameters + ---------- + limit : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetActivityResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "insights/activity", + method="GET", + params={ + "limit": limit, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetActivityResponse, + parse_obj_as( + type_=GetActivityResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_environment_feature_usage_time_series( + self, + *, + end_time: dt.datetime, + feature_id: str, + start_time: dt.datetime, + granularity: typing.Optional[TimeSeriesGranularity] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[GetEnvironmentFeatureUsageTimeSeriesResponse]: + """ + Parameters + ---------- + end_time : dt.datetime + + feature_id : str + + start_time : dt.datetime + + granularity : typing.Optional[TimeSeriesGranularity] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetEnvironmentFeatureUsageTimeSeriesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "insights/feature-usage-timeseries", + method="GET", + params={ + "end_time": serialize_datetime(end_time), + "feature_id": feature_id, + "granularity": granularity, + "start_time": serialize_datetime(start_time), + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetEnvironmentFeatureUsageTimeSeriesResponse, + parse_obj_as( + type_=GetEnvironmentFeatureUsageTimeSeriesResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_plan_growth( + self, *, months: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetPlanGrowthResponse]: + """ + Parameters + ---------- + months : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetPlanGrowthResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "insights/plan-growth", + method="GET", + params={ + "months": months, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetPlanGrowthResponse, + parse_obj_as( + type_=GetPlanGrowthResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_summary( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetSummaryResponse]: + """ + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetSummaryResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "insights/summary", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetSummaryResponse, + parse_obj_as( + type_=GetSummaryResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_top_features_by_usage( + self, + *, + end_time: dt.datetime, + start_time: dt.datetime, + limit: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[GetTopFeaturesByUsageResponse]: + """ + Parameters + ---------- + end_time : dt.datetime + + start_time : dt.datetime + + limit : typing.Optional[int] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetTopFeaturesByUsageResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "insights/top-features", + method="GET", + params={ + "end_time": serialize_datetime(end_time), + "limit": limit, + "start_time": serialize_datetime(start_time), + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetTopFeaturesByUsageResponse, + parse_obj_as( + type_=GetTopFeaturesByUsageResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_environment_trait_usage_time_series( + self, + *, + end_time: dt.datetime, + feature_id: str, + start_time: dt.datetime, + granularity: typing.Optional[TimeSeriesGranularity] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[GetEnvironmentTraitUsageTimeSeriesResponse]: + """ + Parameters + ---------- + end_time : dt.datetime + + feature_id : str + + start_time : dt.datetime + + granularity : typing.Optional[TimeSeriesGranularity] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetEnvironmentTraitUsageTimeSeriesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "insights/trait-usage-timeseries", + method="GET", + params={ + "end_time": serialize_datetime(end_time), + "feature_id": feature_id, + "granularity": granularity, + "start_time": serialize_datetime(start_time), + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetEnvironmentTraitUsageTimeSeriesResponse, + parse_obj_as( + type_=GetEnvironmentTraitUsageTimeSeriesResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) diff --git a/src/schematic/insights/types/__init__.py b/src/schematic/insights/types/__init__.py new file mode 100644 index 0000000..c796994 --- /dev/null +++ b/src/schematic/insights/types/__init__.py @@ -0,0 +1,68 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + +import typing +from importlib import import_module + +if typing.TYPE_CHECKING: + from .get_activity_params import GetActivityParams + from .get_activity_response import GetActivityResponse + from .get_environment_feature_usage_time_series_params import GetEnvironmentFeatureUsageTimeSeriesParams + from .get_environment_feature_usage_time_series_response import GetEnvironmentFeatureUsageTimeSeriesResponse + from .get_environment_trait_usage_time_series_params import GetEnvironmentTraitUsageTimeSeriesParams + from .get_environment_trait_usage_time_series_response import GetEnvironmentTraitUsageTimeSeriesResponse + from .get_plan_growth_params import GetPlanGrowthParams + from .get_plan_growth_response import GetPlanGrowthResponse + from .get_summary_response import GetSummaryResponse + from .get_top_features_by_usage_params import GetTopFeaturesByUsageParams + from .get_top_features_by_usage_response import GetTopFeaturesByUsageResponse +_dynamic_imports: typing.Dict[str, str] = { + "GetActivityParams": ".get_activity_params", + "GetActivityResponse": ".get_activity_response", + "GetEnvironmentFeatureUsageTimeSeriesParams": ".get_environment_feature_usage_time_series_params", + "GetEnvironmentFeatureUsageTimeSeriesResponse": ".get_environment_feature_usage_time_series_response", + "GetEnvironmentTraitUsageTimeSeriesParams": ".get_environment_trait_usage_time_series_params", + "GetEnvironmentTraitUsageTimeSeriesResponse": ".get_environment_trait_usage_time_series_response", + "GetPlanGrowthParams": ".get_plan_growth_params", + "GetPlanGrowthResponse": ".get_plan_growth_response", + "GetSummaryResponse": ".get_summary_response", + "GetTopFeaturesByUsageParams": ".get_top_features_by_usage_params", + "GetTopFeaturesByUsageResponse": ".get_top_features_by_usage_response", +} + + +def __getattr__(attr_name: str) -> typing.Any: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") + try: + module = import_module(module_name, __package__) + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) + except ImportError as e: + raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e + except AttributeError as e: + raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e + + +def __dir__(): + lazy_attrs = list(_dynamic_imports.keys()) + return sorted(lazy_attrs) + + +__all__ = [ + "GetActivityParams", + "GetActivityResponse", + "GetEnvironmentFeatureUsageTimeSeriesParams", + "GetEnvironmentFeatureUsageTimeSeriesResponse", + "GetEnvironmentTraitUsageTimeSeriesParams", + "GetEnvironmentTraitUsageTimeSeriesResponse", + "GetPlanGrowthParams", + "GetPlanGrowthResponse", + "GetSummaryResponse", + "GetTopFeaturesByUsageParams", + "GetTopFeaturesByUsageResponse", +] diff --git a/src/schematic/insights/types/get_activity_params.py b/src/schematic/insights/types/get_activity_params.py new file mode 100644 index 0000000..6fb9277 --- /dev/null +++ b/src/schematic/insights/types/get_activity_params.py @@ -0,0 +1,23 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class GetActivityParams(UniversalBaseModel): + """ + Input parameters + """ + + limit: typing.Optional[int] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/insights/types/get_activity_response.py b/src/schematic/insights/types/get_activity_response.py new file mode 100644 index 0000000..6e42881 --- /dev/null +++ b/src/schematic/insights/types/get_activity_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.activity_response_response_data import ActivityResponseResponseData +from .get_activity_params import GetActivityParams + + +class GetActivityResponse(UniversalBaseModel): + data: ActivityResponseResponseData + params: GetActivityParams = 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/insights/types/get_environment_feature_usage_time_series_params.py b/src/schematic/insights/types/get_environment_feature_usage_time_series_params.py new file mode 100644 index 0000000..0f97c75 --- /dev/null +++ b/src/schematic/insights/types/get_environment_feature_usage_time_series_params.py @@ -0,0 +1,28 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.time_series_granularity import TimeSeriesGranularity + + +class GetEnvironmentFeatureUsageTimeSeriesParams(UniversalBaseModel): + """ + Input parameters + """ + + end_time: typing.Optional[dt.datetime] = None + feature_id: typing.Optional[str] = None + granularity: typing.Optional[TimeSeriesGranularity] = None + start_time: typing.Optional[dt.datetime] = 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/insights/types/get_environment_feature_usage_time_series_response.py b/src/schematic/insights/types/get_environment_feature_usage_time_series_response.py new file mode 100644 index 0000000..5d1a2a8 --- /dev/null +++ b/src/schematic/insights/types/get_environment_feature_usage_time_series_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.environment_feature_usage_time_series_response_data import EnvironmentFeatureUsageTimeSeriesResponseData +from .get_environment_feature_usage_time_series_params import GetEnvironmentFeatureUsageTimeSeriesParams + + +class GetEnvironmentFeatureUsageTimeSeriesResponse(UniversalBaseModel): + data: EnvironmentFeatureUsageTimeSeriesResponseData + params: GetEnvironmentFeatureUsageTimeSeriesParams = 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/insights/types/get_environment_trait_usage_time_series_params.py b/src/schematic/insights/types/get_environment_trait_usage_time_series_params.py new file mode 100644 index 0000000..6c97e00 --- /dev/null +++ b/src/schematic/insights/types/get_environment_trait_usage_time_series_params.py @@ -0,0 +1,28 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.time_series_granularity import TimeSeriesGranularity + + +class GetEnvironmentTraitUsageTimeSeriesParams(UniversalBaseModel): + """ + Input parameters + """ + + end_time: typing.Optional[dt.datetime] = None + feature_id: typing.Optional[str] = None + granularity: typing.Optional[TimeSeriesGranularity] = None + start_time: typing.Optional[dt.datetime] = 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/insights/types/get_environment_trait_usage_time_series_response.py b/src/schematic/insights/types/get_environment_trait_usage_time_series_response.py new file mode 100644 index 0000000..392c536 --- /dev/null +++ b/src/schematic/insights/types/get_environment_trait_usage_time_series_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.environment_trait_usage_time_series_response_data import EnvironmentTraitUsageTimeSeriesResponseData +from .get_environment_trait_usage_time_series_params import GetEnvironmentTraitUsageTimeSeriesParams + + +class GetEnvironmentTraitUsageTimeSeriesResponse(UniversalBaseModel): + data: EnvironmentTraitUsageTimeSeriesResponseData + params: GetEnvironmentTraitUsageTimeSeriesParams = 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/insights/types/get_plan_growth_params.py b/src/schematic/insights/types/get_plan_growth_params.py new file mode 100644 index 0000000..f30b1f6 --- /dev/null +++ b/src/schematic/insights/types/get_plan_growth_params.py @@ -0,0 +1,23 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class GetPlanGrowthParams(UniversalBaseModel): + """ + Input parameters + """ + + months: typing.Optional[int] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/insights/types/get_plan_growth_response.py b/src/schematic/insights/types/get_plan_growth_response.py new file mode 100644 index 0000000..cb91325 --- /dev/null +++ b/src/schematic/insights/types/get_plan_growth_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.plan_growth_response_data import PlanGrowthResponseData +from .get_plan_growth_params import GetPlanGrowthParams + + +class GetPlanGrowthResponse(UniversalBaseModel): + data: PlanGrowthResponseData + params: GetPlanGrowthParams = 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/insights/types/get_summary_response.py b/src/schematic/insights/types/get_summary_response.py new file mode 100644 index 0000000..18aeddd --- /dev/null +++ b/src/schematic/insights/types/get_summary_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.insights_summary_response_data import InsightsSummaryResponseData + + +class GetSummaryResponse(UniversalBaseModel): + data: InsightsSummaryResponseData + params: typing.Dict[str, 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/insights/types/get_top_features_by_usage_params.py b/src/schematic/insights/types/get_top_features_by_usage_params.py new file mode 100644 index 0000000..6810d3f --- /dev/null +++ b/src/schematic/insights/types/get_top_features_by_usage_params.py @@ -0,0 +1,26 @@ +# 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 GetTopFeaturesByUsageParams(UniversalBaseModel): + """ + Input parameters + """ + + end_time: typing.Optional[dt.datetime] = None + limit: typing.Optional[int] = None + start_time: typing.Optional[dt.datetime] = 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/insights/types/get_top_features_by_usage_response.py b/src/schematic/insights/types/get_top_features_by_usage_response.py new file mode 100644 index 0000000..03cec59 --- /dev/null +++ b/src/schematic/insights/types/get_top_features_by_usage_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.top_features_by_usage_response_data import TopFeaturesByUsageResponseData +from .get_top_features_by_usage_params import GetTopFeaturesByUsageParams + + +class GetTopFeaturesByUsageResponse(UniversalBaseModel): + data: TopFeaturesByUsageResponseData + params: GetTopFeaturesByUsageParams = 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/integrationsapi/__init__.py b/src/schematic/integrationsapi/__init__.py index 8e9a8dd..c6490c5 100644 --- a/src/schematic/integrationsapi/__init__.py +++ b/src/schematic/integrationsapi/__init__.py @@ -6,8 +6,24 @@ from importlib import import_module if typing.TYPE_CHECKING: - from .types import GetIntegrationWebhookUrlResponse -_dynamic_imports: typing.Dict[str, str] = {"GetIntegrationWebhookUrlResponse": ".types"} + from .types import ( + GetIntegrationWebhookUrlResponse, + ListIntegrationsParams, + ListIntegrationsResponse, + LoadSampleDataSetV2Response, + RunIntegrationResponse, + StartDataImportResponse, + UninstallIntegrationResponse, + ) +_dynamic_imports: typing.Dict[str, str] = { + "GetIntegrationWebhookUrlResponse": ".types", + "ListIntegrationsParams": ".types", + "ListIntegrationsResponse": ".types", + "LoadSampleDataSetV2Response": ".types", + "RunIntegrationResponse": ".types", + "StartDataImportResponse": ".types", + "UninstallIntegrationResponse": ".types", +} def __getattr__(attr_name: str) -> typing.Any: @@ -31,4 +47,12 @@ def __dir__(): return sorted(lazy_attrs) -__all__ = ["GetIntegrationWebhookUrlResponse"] +__all__ = [ + "GetIntegrationWebhookUrlResponse", + "ListIntegrationsParams", + "ListIntegrationsResponse", + "LoadSampleDataSetV2Response", + "RunIntegrationResponse", + "StartDataImportResponse", + "UninstallIntegrationResponse", +] diff --git a/src/schematic/integrationsapi/client.py b/src/schematic/integrationsapi/client.py index 57c9923..b64bbd8 100644 --- a/src/schematic/integrationsapi/client.py +++ b/src/schematic/integrationsapi/client.py @@ -4,8 +4,19 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions +from ..types.company_matching_criteria import CompanyMatchingCriteria +from ..types.integration_state import IntegrationState +from ..types.integration_type import IntegrationType from .raw_client import AsyncRawIntegrationsapiClient, RawIntegrationsapiClient from .types.get_integration_webhook_url_response import GetIntegrationWebhookUrlResponse +from .types.list_integrations_response import ListIntegrationsResponse +from .types.load_sample_data_set_v_2_response import LoadSampleDataSetV2Response +from .types.run_integration_response import RunIntegrationResponse +from .types.start_data_import_response import StartDataImportResponse +from .types.uninstall_integration_response import UninstallIntegrationResponse + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) class IntegrationsapiClient: @@ -23,6 +34,105 @@ def with_raw_response(self) -> RawIntegrationsapiClient: """ return self._raw_client + def run_integration( + self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> RunIntegrationResponse: + """ + Parameters + ---------- + integration_id : str + integration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + RunIntegrationResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.integrationsapi.run_integration( + integration_id="integration_id", + ) + """ + _response = self._raw_client.run_integration(integration_id, request_options=request_options) + return _response.data + + def list_integrations( + self, + *, + billing_only: typing.Optional[bool] = None, + exclude_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + id: typing.Optional[str] = None, + state: typing.Optional[IntegrationState] = None, + type: typing.Optional[IntegrationType] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListIntegrationsResponse: + """ + Parameters + ---------- + billing_only : typing.Optional[bool] + + exclude_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + id : typing.Optional[str] + + state : typing.Optional[IntegrationState] + + type : typing.Optional[IntegrationType] + + 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 + ------- + ListIntegrationsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.integrationsapi.list_integrations( + billing_only=True, + exclude_ids=["exclude_ids"], + id="id", + state="active", + type="clerk", + limit=1000000, + offset=1000000, + ) + """ + _response = self._raw_client.list_integrations( + billing_only=billing_only, + exclude_ids=exclude_ids, + id=id, + state=state, + type=type, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + def get_integration_webhook_url( self, type: str, *, request_options: typing.Optional[RequestOptions] = None ) -> GetIntegrationWebhookUrlResponse: @@ -54,6 +164,107 @@ def get_integration_webhook_url( _response = self._raw_client.get_integration_webhook_url(type, request_options=request_options) return _response.data + def start_data_import( + self, + *, + integration_id: str, + company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT, + company_matching_field: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> StartDataImportResponse: + """ + Parameters + ---------- + integration_id : str + + company_matching_criteria : typing.Optional[CompanyMatchingCriteria] + + company_matching_field : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StartDataImportResponse + Created + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.integrationsapi.start_data_import( + integration_id="integration_id", + ) + """ + _response = self._raw_client.start_data_import( + integration_id=integration_id, + company_matching_criteria=company_matching_criteria, + company_matching_field=company_matching_field, + request_options=request_options, + ) + return _response.data + + def load_sample_data_set_v_2( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> LoadSampleDataSetV2Response: + """ + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + LoadSampleDataSetV2Response + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.integrationsapi.load_sample_data_set_v_2() + """ + _response = self._raw_client.load_sample_data_set_v_2(request_options=request_options) + return _response.data + + def uninstall_integration( + self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> UninstallIntegrationResponse: + """ + Parameters + ---------- + integration_id : str + integration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UninstallIntegrationResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.integrationsapi.uninstall_integration( + integration_id="integration_id", + ) + """ + _response = self._raw_client.uninstall_integration(integration_id, request_options=request_options) + return _response.data + class AsyncIntegrationsapiClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -70,6 +281,121 @@ def with_raw_response(self) -> AsyncRawIntegrationsapiClient: """ return self._raw_client + async def run_integration( + self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> RunIntegrationResponse: + """ + Parameters + ---------- + integration_id : str + integration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + RunIntegrationResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.integrationsapi.run_integration( + integration_id="integration_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.run_integration(integration_id, request_options=request_options) + return _response.data + + async def list_integrations( + self, + *, + billing_only: typing.Optional[bool] = None, + exclude_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + id: typing.Optional[str] = None, + state: typing.Optional[IntegrationState] = None, + type: typing.Optional[IntegrationType] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListIntegrationsResponse: + """ + Parameters + ---------- + billing_only : typing.Optional[bool] + + exclude_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + id : typing.Optional[str] + + state : typing.Optional[IntegrationState] + + type : typing.Optional[IntegrationType] + + 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 + ------- + ListIntegrationsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.integrationsapi.list_integrations( + billing_only=True, + exclude_ids=["exclude_ids"], + id="id", + state="active", + type="clerk", + limit=1000000, + offset=1000000, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_integrations( + billing_only=billing_only, + exclude_ids=exclude_ids, + id=id, + state=state, + type=type, + limit=limit, + offset=offset, + request_options=request_options, + ) + return _response.data + async def get_integration_webhook_url( self, type: str, *, request_options: typing.Optional[RequestOptions] = None ) -> GetIntegrationWebhookUrlResponse: @@ -108,3 +434,128 @@ async def main() -> None: """ _response = await self._raw_client.get_integration_webhook_url(type, request_options=request_options) return _response.data + + async def start_data_import( + self, + *, + integration_id: str, + company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT, + company_matching_field: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> StartDataImportResponse: + """ + Parameters + ---------- + integration_id : str + + company_matching_criteria : typing.Optional[CompanyMatchingCriteria] + + company_matching_field : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StartDataImportResponse + Created + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.integrationsapi.start_data_import( + integration_id="integration_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.start_data_import( + integration_id=integration_id, + company_matching_criteria=company_matching_criteria, + company_matching_field=company_matching_field, + request_options=request_options, + ) + return _response.data + + async def load_sample_data_set_v_2( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> LoadSampleDataSetV2Response: + """ + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + LoadSampleDataSetV2Response + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.integrationsapi.load_sample_data_set_v_2() + + + asyncio.run(main()) + """ + _response = await self._raw_client.load_sample_data_set_v_2(request_options=request_options) + return _response.data + + async def uninstall_integration( + self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> UninstallIntegrationResponse: + """ + Parameters + ---------- + integration_id : str + integration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UninstallIntegrationResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.integrationsapi.uninstall_integration( + integration_id="integration_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.uninstall_integration(integration_id, request_options=request_options) + return _response.data diff --git a/src/schematic/integrationsapi/raw_client.py b/src/schematic/integrationsapi/raw_client.py index 2a04672..4889c44 100644 --- a/src/schematic/integrationsapi/raw_client.py +++ b/src/schematic/integrationsapi/raw_client.py @@ -10,47 +10,59 @@ from ..core.parse_error import ParsingError from ..core.pydantic_utilities import parse_obj_as from ..core.request_options import RequestOptions +from ..errors.bad_request_error import BadRequestError from ..errors.forbidden_error import ForbiddenError from ..errors.internal_server_error import InternalServerError from ..errors.not_found_error import NotFoundError from ..errors.unauthorized_error import UnauthorizedError from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.company_matching_criteria import CompanyMatchingCriteria +from ..types.integration_state import IntegrationState +from ..types.integration_type import IntegrationType from .types.get_integration_webhook_url_response import GetIntegrationWebhookUrlResponse +from .types.list_integrations_response import ListIntegrationsResponse +from .types.load_sample_data_set_v_2_response import LoadSampleDataSetV2Response +from .types.run_integration_response import RunIntegrationResponse +from .types.start_data_import_response import StartDataImportResponse +from .types.uninstall_integration_response import UninstallIntegrationResponse from pydantic import ValidationError +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + class RawIntegrationsapiClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_integration_webhook_url( - self, type: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[GetIntegrationWebhookUrlResponse]: + def run_integration( + self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[RunIntegrationResponse]: """ Parameters ---------- - type : str - type + integration_id : str + integration_id request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[GetIntegrationWebhookUrlResponse] + HttpResponse[RunIntegrationResponse] OK """ _response = self._client_wrapper.httpx_client.request( - f"integrations/{jsonable_encoder(type)}/webhook-url", + f"integration/start/{jsonable_encoder(integration_id)}", method="GET", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GetIntegrationWebhookUrlResponse, + RunIntegrationResponse, parse_obj_as( - type_=GetIntegrationWebhookUrlResponse, # type: ignore + type_=RunIntegrationResponse, # type: ignore object_=_response.json(), ), ) @@ -112,14 +124,140 @@ def get_integration_webhook_url( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def list_integrations( + self, + *, + billing_only: typing.Optional[bool] = None, + exclude_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + id: typing.Optional[str] = None, + state: typing.Optional[IntegrationState] = None, + type: typing.Optional[IntegrationType] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListIntegrationsResponse]: + """ + Parameters + ---------- + billing_only : typing.Optional[bool] -class AsyncRawIntegrationsapiClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._client_wrapper = client_wrapper + exclude_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] - async def get_integration_webhook_url( + id : typing.Optional[str] + + state : typing.Optional[IntegrationState] + + type : typing.Optional[IntegrationType] + + 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[ListIntegrationsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "integrations", + method="GET", + params={ + "billing_only": billing_only, + "exclude_ids": exclude_ids, + "id": id, + "state": state, + "type": type, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListIntegrationsResponse, + parse_obj_as( + type_=ListIntegrationsResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_integration_webhook_url( self, type: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[GetIntegrationWebhookUrlResponse]: + ) -> HttpResponse[GetIntegrationWebhookUrlResponse]: """ Parameters ---------- @@ -131,10 +269,10 @@ async def get_integration_webhook_url( Returns ------- - AsyncHttpResponse[GetIntegrationWebhookUrlResponse] + HttpResponse[GetIntegrationWebhookUrlResponse] OK """ - _response = await self._client_wrapper.httpx_client.request( + _response = self._client_wrapper.httpx_client.request( f"integrations/{jsonable_encoder(type)}/webhook-url", method="GET", request_options=request_options, @@ -148,7 +286,927 @@ async def get_integration_webhook_url( object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) + 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def start_data_import( + self, + *, + integration_id: str, + company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT, + company_matching_field: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[StartDataImportResponse]: + """ + Parameters + ---------- + integration_id : str + + company_matching_criteria : typing.Optional[CompanyMatchingCriteria] + + company_matching_field : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[StartDataImportResponse] + Created + """ + _response = self._client_wrapper.httpx_client.request( + "integrations/start-data-import", + method="POST", + json={ + "company_matching_criteria": company_matching_criteria, + "company_matching_field": company_matching_field, + "integration_id": integration_id, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + StartDataImportResponse, + parse_obj_as( + type_=StartDataImportResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def load_sample_data_set_v_2( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[LoadSampleDataSetV2Response]: + """ + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[LoadSampleDataSetV2Response] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "integrations/stripe/dataset-sample-v2", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + LoadSampleDataSetV2Response, + parse_obj_as( + type_=LoadSampleDataSetV2Response, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def uninstall_integration( + self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[UninstallIntegrationResponse]: + """ + Parameters + ---------- + integration_id : str + integration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[UninstallIntegrationResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"integrations/uninstall/{jsonable_encoder(integration_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UninstallIntegrationResponse, + parse_obj_as( + type_=UninstallIntegrationResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + +class AsyncRawIntegrationsapiClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def run_integration( + self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[RunIntegrationResponse]: + """ + Parameters + ---------- + integration_id : str + integration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[RunIntegrationResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"integration/start/{jsonable_encoder(integration_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + RunIntegrationResponse, + parse_obj_as( + type_=RunIntegrationResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def list_integrations( + self, + *, + billing_only: typing.Optional[bool] = None, + exclude_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None, + id: typing.Optional[str] = None, + state: typing.Optional[IntegrationState] = None, + type: typing.Optional[IntegrationType] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListIntegrationsResponse]: + """ + Parameters + ---------- + billing_only : typing.Optional[bool] + + exclude_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]] + + id : typing.Optional[str] + + state : typing.Optional[IntegrationState] + + type : typing.Optional[IntegrationType] + + 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[ListIntegrationsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "integrations", + method="GET", + params={ + "billing_only": billing_only, + "exclude_ids": exclude_ids, + "id": id, + "state": state, + "type": type, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListIntegrationsResponse, + parse_obj_as( + type_=ListIntegrationsResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_integration_webhook_url( + self, type: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetIntegrationWebhookUrlResponse]: + """ + Parameters + ---------- + type : str + type + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetIntegrationWebhookUrlResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"integrations/{jsonable_encoder(type)}/webhook-url", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetIntegrationWebhookUrlResponse, + parse_obj_as( + type_=GetIntegrationWebhookUrlResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def start_data_import( + self, + *, + integration_id: str, + company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT, + company_matching_field: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[StartDataImportResponse]: + """ + Parameters + ---------- + integration_id : str + + company_matching_criteria : typing.Optional[CompanyMatchingCriteria] + + company_matching_field : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[StartDataImportResponse] + Created + """ + _response = await self._client_wrapper.httpx_client.request( + "integrations/start-data-import", + method="POST", + json={ + "company_matching_criteria": company_matching_criteria, + "company_matching_field": company_matching_field, + "integration_id": integration_id, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + StartDataImportResponse, + parse_obj_as( + type_=StartDataImportResponse, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def load_sample_data_set_v_2( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[LoadSampleDataSetV2Response]: + """ + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[LoadSampleDataSetV2Response] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "integrations/stripe/dataset-sample-v2", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + LoadSampleDataSetV2Response, + parse_obj_as( + type_=LoadSampleDataSetV2Response, # 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 + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def uninstall_integration( + self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[UninstallIntegrationResponse]: + """ + Parameters + ---------- + integration_id : str + integration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[UninstallIntegrationResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"integrations/uninstall/{jsonable_encoder(integration_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UninstallIntegrationResponse, + parse_obj_as( + type_=UninstallIntegrationResponse, # 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), diff --git a/src/schematic/integrationsapi/types/__init__.py b/src/schematic/integrationsapi/types/__init__.py index 2e299bd..df68e27 100644 --- a/src/schematic/integrationsapi/types/__init__.py +++ b/src/schematic/integrationsapi/types/__init__.py @@ -7,7 +7,21 @@ if typing.TYPE_CHECKING: from .get_integration_webhook_url_response import GetIntegrationWebhookUrlResponse -_dynamic_imports: typing.Dict[str, str] = {"GetIntegrationWebhookUrlResponse": ".get_integration_webhook_url_response"} + from .list_integrations_params import ListIntegrationsParams + from .list_integrations_response import ListIntegrationsResponse + from .load_sample_data_set_v_2_response import LoadSampleDataSetV2Response + from .run_integration_response import RunIntegrationResponse + from .start_data_import_response import StartDataImportResponse + from .uninstall_integration_response import UninstallIntegrationResponse +_dynamic_imports: typing.Dict[str, str] = { + "GetIntegrationWebhookUrlResponse": ".get_integration_webhook_url_response", + "ListIntegrationsParams": ".list_integrations_params", + "ListIntegrationsResponse": ".list_integrations_response", + "LoadSampleDataSetV2Response": ".load_sample_data_set_v_2_response", + "RunIntegrationResponse": ".run_integration_response", + "StartDataImportResponse": ".start_data_import_response", + "UninstallIntegrationResponse": ".uninstall_integration_response", +} def __getattr__(attr_name: str) -> typing.Any: @@ -31,4 +45,12 @@ def __dir__(): return sorted(lazy_attrs) -__all__ = ["GetIntegrationWebhookUrlResponse"] +__all__ = [ + "GetIntegrationWebhookUrlResponse", + "ListIntegrationsParams", + "ListIntegrationsResponse", + "LoadSampleDataSetV2Response", + "RunIntegrationResponse", + "StartDataImportResponse", + "UninstallIntegrationResponse", +] diff --git a/src/schematic/integrationsapi/types/list_integrations_params.py b/src/schematic/integrationsapi/types/list_integrations_params.py new file mode 100644 index 0000000..e215e3b --- /dev/null +++ b/src/schematic/integrationsapi/types/list_integrations_params.py @@ -0,0 +1,39 @@ +# 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.integration_state import IntegrationState +from ...types.integration_type import IntegrationType + + +class ListIntegrationsParams(UniversalBaseModel): + """ + Input parameters + """ + + billing_only: typing.Optional[bool] = None + exclude_ids: typing.Optional[typing.List[str]] = None + id: typing.Optional[str] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + state: typing.Optional[IntegrationState] = None + type: typing.Optional[IntegrationType] = 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/integrationsapi/types/list_integrations_response.py b/src/schematic/integrationsapi/types/list_integrations_response.py new file mode 100644 index 0000000..be1649f --- /dev/null +++ b/src/schematic/integrationsapi/types/list_integrations_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.integrations_list_response_data import IntegrationsListResponseData +from .list_integrations_params import ListIntegrationsParams + + +class ListIntegrationsResponse(UniversalBaseModel): + data: typing.List[IntegrationsListResponseData] + params: ListIntegrationsParams = 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/integrationsapi/types/load_sample_data_set_v_2_response.py b/src/schematic/integrationsapi/types/load_sample_data_set_v_2_response.py new file mode 100644 index 0000000..28bdbe8 --- /dev/null +++ b/src/schematic/integrationsapi/types/load_sample_data_set_v_2_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.integrations_data_set_response_data import IntegrationsDataSetResponseData + + +class LoadSampleDataSetV2Response(UniversalBaseModel): + data: IntegrationsDataSetResponseData + params: typing.Dict[str, 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/integrationsapi/types/run_integration_response.py b/src/schematic/integrationsapi/types/run_integration_response.py new file mode 100644 index 0000000..a0b669b --- /dev/null +++ b/src/schematic/integrationsapi/types/run_integration_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.integrations_response_data import IntegrationsResponseData + + +class RunIntegrationResponse(UniversalBaseModel): + data: IntegrationsResponseData + params: typing.Dict[str, 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/integrationsapi/types/start_data_import_response.py b/src/schematic/integrationsapi/types/start_data_import_response.py new file mode 100644 index 0000000..bd0e0dc --- /dev/null +++ b/src/schematic/integrationsapi/types/start_data_import_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.integrations_response_data import IntegrationsResponseData + + +class StartDataImportResponse(UniversalBaseModel): + data: IntegrationsResponseData + params: typing.Dict[str, 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/integrationsapi/types/uninstall_integration_response.py b/src/schematic/integrationsapi/types/uninstall_integration_response.py new file mode 100644 index 0000000..7dc0aeb --- /dev/null +++ b/src/schematic/integrationsapi/types/uninstall_integration_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.delete_response import DeleteResponse + + +class UninstallIntegrationResponse(UniversalBaseModel): + data: DeleteResponse + params: typing.Dict[str, 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/client.py b/src/schematic/plans/client.py index 3016829..72443e3 100644 --- a/src/schematic/plans/client.py +++ b/src/schematic/plans/client.py @@ -281,6 +281,7 @@ def list_plans( self, *, company_id: typing.Optional[str] = None, + company_scoped_only: typing.Optional[bool] = None, exclude_company_scoped: typing.Optional[bool] = None, for_fallback_plan: typing.Optional[bool] = None, for_initial_plan: typing.Optional[bool] = None, @@ -302,6 +303,9 @@ def list_plans( ---------- company_id : typing.Optional[str] + company_scoped_only : typing.Optional[bool] + Only return plans that are scoped to a company (custom plans assigned to a company) + exclude_company_scoped : typing.Optional[bool] Exclude plans that are scoped to a company (custom plans assigned to a company) @@ -359,6 +363,7 @@ def list_plans( ) client.plans.list_plans( company_id="company_id", + company_scoped_only=True, exclude_company_scoped=True, for_fallback_plan=True, for_initial_plan=True, @@ -377,6 +382,7 @@ def list_plans( """ _response = self._raw_client.list_plans( company_id=company_id, + company_scoped_only=company_scoped_only, exclude_company_scoped=exclude_company_scoped, for_fallback_plan=for_fallback_plan, for_initial_plan=for_initial_plan, @@ -652,6 +658,7 @@ def upsert_plan_for_billing_product( external_resource_id: str, name: str, plan_type: PlanType, + external_resource_version: typing.Optional[str] = OMIT, icon: typing.Optional[PlanIcon] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertPlanForBillingProductResponse: @@ -668,6 +675,8 @@ def upsert_plan_for_billing_product( plan_type : PlanType + external_resource_version : typing.Optional[str] + icon : typing.Optional[PlanIcon] request_options : typing.Optional[RequestOptions] @@ -699,6 +708,7 @@ def upsert_plan_for_billing_product( external_resource_id=external_resource_id, name=name, plan_type=plan_type, + external_resource_version=external_resource_version, icon=icon, request_options=request_options, ) @@ -810,6 +820,7 @@ def count_plans( self, *, company_id: typing.Optional[str] = None, + company_scoped_only: typing.Optional[bool] = None, exclude_company_scoped: typing.Optional[bool] = None, for_fallback_plan: typing.Optional[bool] = None, for_initial_plan: typing.Optional[bool] = None, @@ -831,6 +842,9 @@ def count_plans( ---------- company_id : typing.Optional[str] + company_scoped_only : typing.Optional[bool] + Only return plans that are scoped to a company (custom plans assigned to a company) + exclude_company_scoped : typing.Optional[bool] Exclude plans that are scoped to a company (custom plans assigned to a company) @@ -888,6 +902,7 @@ def count_plans( ) client.plans.count_plans( company_id="company_id", + company_scoped_only=True, exclude_company_scoped=True, for_fallback_plan=True, for_initial_plan=True, @@ -906,6 +921,7 @@ def count_plans( """ _response = self._raw_client.count_plans( company_id=company_id, + company_scoped_only=company_scoped_only, exclude_company_scoped=exclude_company_scoped, for_fallback_plan=for_fallback_plan, for_initial_plan=for_initial_plan, @@ -1350,6 +1366,7 @@ async def list_plans( self, *, company_id: typing.Optional[str] = None, + company_scoped_only: typing.Optional[bool] = None, exclude_company_scoped: typing.Optional[bool] = None, for_fallback_plan: typing.Optional[bool] = None, for_initial_plan: typing.Optional[bool] = None, @@ -1371,6 +1388,9 @@ async def list_plans( ---------- company_id : typing.Optional[str] + company_scoped_only : typing.Optional[bool] + Only return plans that are scoped to a company (custom plans assigned to a company) + exclude_company_scoped : typing.Optional[bool] Exclude plans that are scoped to a company (custom plans assigned to a company) @@ -1433,6 +1453,7 @@ async def list_plans( async def main() -> None: await client.plans.list_plans( company_id="company_id", + company_scoped_only=True, exclude_company_scoped=True, for_fallback_plan=True, for_initial_plan=True, @@ -1454,6 +1475,7 @@ async def main() -> None: """ _response = await self._raw_client.list_plans( company_id=company_id, + company_scoped_only=company_scoped_only, exclude_company_scoped=exclude_company_scoped, for_fallback_plan=for_fallback_plan, for_initial_plan=for_initial_plan, @@ -1771,6 +1793,7 @@ async def upsert_plan_for_billing_product( external_resource_id: str, name: str, plan_type: PlanType, + external_resource_version: typing.Optional[str] = OMIT, icon: typing.Optional[PlanIcon] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> UpsertPlanForBillingProductResponse: @@ -1787,6 +1810,8 @@ async def upsert_plan_for_billing_product( plan_type : PlanType + external_resource_version : typing.Optional[str] + icon : typing.Optional[PlanIcon] request_options : typing.Optional[RequestOptions] @@ -1826,6 +1851,7 @@ async def main() -> None: external_resource_id=external_resource_id, name=name, plan_type=plan_type, + external_resource_version=external_resource_version, icon=icon, request_options=request_options, ) @@ -1953,6 +1979,7 @@ async def count_plans( self, *, company_id: typing.Optional[str] = None, + company_scoped_only: typing.Optional[bool] = None, exclude_company_scoped: typing.Optional[bool] = None, for_fallback_plan: typing.Optional[bool] = None, for_initial_plan: typing.Optional[bool] = None, @@ -1974,6 +2001,9 @@ async def count_plans( ---------- company_id : typing.Optional[str] + company_scoped_only : typing.Optional[bool] + Only return plans that are scoped to a company (custom plans assigned to a company) + exclude_company_scoped : typing.Optional[bool] Exclude plans that are scoped to a company (custom plans assigned to a company) @@ -2036,6 +2066,7 @@ async def count_plans( async def main() -> None: await client.plans.count_plans( company_id="company_id", + company_scoped_only=True, exclude_company_scoped=True, for_fallback_plan=True, for_initial_plan=True, @@ -2057,6 +2088,7 @@ async def main() -> None: """ _response = await self._raw_client.count_plans( company_id=company_id, + company_scoped_only=company_scoped_only, exclude_company_scoped=exclude_company_scoped, for_fallback_plan=for_fallback_plan, for_initial_plan=for_initial_plan, diff --git a/src/schematic/plans/raw_client.py b/src/schematic/plans/raw_client.py index 4e31e15..1d16381 100644 --- a/src/schematic/plans/raw_client.py +++ b/src/schematic/plans/raw_client.py @@ -559,6 +559,7 @@ def list_plans( self, *, company_id: typing.Optional[str] = None, + company_scoped_only: typing.Optional[bool] = None, exclude_company_scoped: typing.Optional[bool] = None, for_fallback_plan: typing.Optional[bool] = None, for_initial_plan: typing.Optional[bool] = None, @@ -580,6 +581,9 @@ def list_plans( ---------- company_id : typing.Optional[str] + company_scoped_only : typing.Optional[bool] + Only return plans that are scoped to a company (custom plans assigned to a company) + exclude_company_scoped : typing.Optional[bool] Exclude plans that are scoped to a company (custom plans assigned to a company) @@ -633,6 +637,7 @@ def list_plans( method="GET", params={ "company_id": company_id, + "company_scoped_only": company_scoped_only, "exclude_company_scoped": exclude_company_scoped, "for_fallback_plan": for_fallback_plan, "for_initial_plan": for_initial_plan, @@ -1336,6 +1341,7 @@ def upsert_plan_for_billing_product( external_resource_id: str, name: str, plan_type: PlanType, + external_resource_version: typing.Optional[str] = OMIT, icon: typing.Optional[PlanIcon] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[UpsertPlanForBillingProductResponse]: @@ -1352,6 +1358,8 @@ def upsert_plan_for_billing_product( plan_type : PlanType + external_resource_version : typing.Optional[str] + icon : typing.Optional[PlanIcon] request_options : typing.Optional[RequestOptions] @@ -1369,6 +1377,7 @@ def upsert_plan_for_billing_product( "billing_provider": billing_provider, "description": description, "external_resource_id": external_resource_id, + "external_resource_version": external_resource_version, "icon": icon, "name": name, "plan_type": plan_type, @@ -1703,6 +1712,7 @@ def count_plans( self, *, company_id: typing.Optional[str] = None, + company_scoped_only: typing.Optional[bool] = None, exclude_company_scoped: typing.Optional[bool] = None, for_fallback_plan: typing.Optional[bool] = None, for_initial_plan: typing.Optional[bool] = None, @@ -1724,6 +1734,9 @@ def count_plans( ---------- company_id : typing.Optional[str] + company_scoped_only : typing.Optional[bool] + Only return plans that are scoped to a company (custom plans assigned to a company) + exclude_company_scoped : typing.Optional[bool] Exclude plans that are scoped to a company (custom plans assigned to a company) @@ -1777,6 +1790,7 @@ def count_plans( method="GET", params={ "company_id": company_id, + "company_scoped_only": company_scoped_only, "exclude_company_scoped": exclude_company_scoped, "for_fallback_plan": for_fallback_plan, "for_initial_plan": for_initial_plan, @@ -2736,6 +2750,7 @@ async def list_plans( self, *, company_id: typing.Optional[str] = None, + company_scoped_only: typing.Optional[bool] = None, exclude_company_scoped: typing.Optional[bool] = None, for_fallback_plan: typing.Optional[bool] = None, for_initial_plan: typing.Optional[bool] = None, @@ -2757,6 +2772,9 @@ async def list_plans( ---------- company_id : typing.Optional[str] + company_scoped_only : typing.Optional[bool] + Only return plans that are scoped to a company (custom plans assigned to a company) + exclude_company_scoped : typing.Optional[bool] Exclude plans that are scoped to a company (custom plans assigned to a company) @@ -2810,6 +2828,7 @@ async def list_plans( method="GET", params={ "company_id": company_id, + "company_scoped_only": company_scoped_only, "exclude_company_scoped": exclude_company_scoped, "for_fallback_plan": for_fallback_plan, "for_initial_plan": for_initial_plan, @@ -3513,6 +3532,7 @@ async def upsert_plan_for_billing_product( external_resource_id: str, name: str, plan_type: PlanType, + external_resource_version: typing.Optional[str] = OMIT, icon: typing.Optional[PlanIcon] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[UpsertPlanForBillingProductResponse]: @@ -3529,6 +3549,8 @@ async def upsert_plan_for_billing_product( plan_type : PlanType + external_resource_version : typing.Optional[str] + icon : typing.Optional[PlanIcon] request_options : typing.Optional[RequestOptions] @@ -3546,6 +3568,7 @@ async def upsert_plan_for_billing_product( "billing_provider": billing_provider, "description": description, "external_resource_id": external_resource_id, + "external_resource_version": external_resource_version, "icon": icon, "name": name, "plan_type": plan_type, @@ -3880,6 +3903,7 @@ async def count_plans( self, *, company_id: typing.Optional[str] = None, + company_scoped_only: typing.Optional[bool] = None, exclude_company_scoped: typing.Optional[bool] = None, for_fallback_plan: typing.Optional[bool] = None, for_initial_plan: typing.Optional[bool] = None, @@ -3901,6 +3925,9 @@ async def count_plans( ---------- company_id : typing.Optional[str] + company_scoped_only : typing.Optional[bool] + Only return plans that are scoped to a company (custom plans assigned to a company) + exclude_company_scoped : typing.Optional[bool] Exclude plans that are scoped to a company (custom plans assigned to a company) @@ -3954,6 +3981,7 @@ async def count_plans( method="GET", params={ "company_id": company_id, + "company_scoped_only": company_scoped_only, "exclude_company_scoped": exclude_company_scoped, "for_fallback_plan": for_fallback_plan, "for_initial_plan": for_initial_plan, diff --git a/src/schematic/plans/types/count_plans_params.py b/src/schematic/plans/types/count_plans_params.py index de92dfb..0ab901f 100644 --- a/src/schematic/plans/types/count_plans_params.py +++ b/src/schematic/plans/types/count_plans_params.py @@ -13,6 +13,11 @@ class CountPlansParams(UniversalBaseModel): """ company_id: typing.Optional[str] = None + company_scoped_only: typing.Optional[bool] = pydantic.Field(default=None) + """ + Only return plans that are scoped to a company (custom plans assigned to a company) + """ + exclude_company_scoped: typing.Optional[bool] = pydantic.Field(default=None) """ Exclude plans that are scoped to a company (custom plans assigned to a company) diff --git a/src/schematic/plans/types/list_plans_params.py b/src/schematic/plans/types/list_plans_params.py index ad46bb6..f43ae92 100644 --- a/src/schematic/plans/types/list_plans_params.py +++ b/src/schematic/plans/types/list_plans_params.py @@ -13,6 +13,11 @@ class ListPlansParams(UniversalBaseModel): """ company_id: typing.Optional[str] = None + company_scoped_only: typing.Optional[bool] = pydantic.Field(default=None) + """ + Only return plans that are scoped to a company (custom plans assigned to a company) + """ + exclude_company_scoped: typing.Optional[bool] = pydantic.Field(default=None) """ Exclude plans that are scoped to a company (custom plans assigned to a company) diff --git a/src/schematic/types/__init__.py b/src/schematic/types/__init__.py index 0ce3ea8..1ae1614 100644 --- a/src/schematic/types/__init__.py +++ b/src/schematic/types/__init__.py @@ -9,9 +9,12 @@ from .account_member_permission import AccountMemberPermission from .account_member_response_data import AccountMemberResponseData from .account_member_role import AccountMemberRole + from .activity_entry_response_data import ActivityEntryResponseData + from .activity_response_response_data import ActivityResponseResponseData from .actor_type import ActorType from .api_error import ApiError from .api_key_create_response_data import ApiKeyCreateResponseData + from .api_key_integration_response_data import ApiKeyIntegrationResponseData from .api_key_response_data import ApiKeyResponseData from .api_key_scope import ApiKeyScope from .audit_log_list_response_data import AuditLogListResponseData @@ -71,13 +74,17 @@ from .checkout_data_response_data import CheckoutDataResponseData from .checkout_settings_response_data import CheckoutSettingsResponseData from .checkout_subscription import CheckoutSubscription + from .clerk_integration_config import ClerkIntegrationConfig + from .company_credit_balance_response_data import CompanyCreditBalanceResponseData from .company_detail_response_data import CompanyDetailResponseData from .company_event_period_metrics_response_data import CompanyEventPeriodMetricsResponseData from .company_ledger_response_data import CompanyLedgerResponseData + from .company_matching_criteria import CompanyMatchingCriteria from .company_membership_detail_response_data import CompanyMembershipDetailResponseData from .company_membership_response_data import CompanyMembershipResponseData from .company_override_note_response_data import CompanyOverrideNoteResponseData from .company_override_response_data import CompanyOverrideResponseData + from .company_plan_credit_grant_view import CompanyPlanCreditGrantView from .company_plan_detail_response_data import CompanyPlanDetailResponseData from .company_plan_invalid_reason import CompanyPlanInvalidReason from .company_plan_with_billing_sub_view import CompanyPlanWithBillingSubView @@ -122,6 +129,7 @@ from .credit_bundle_currency_price_response_data import CreditBundleCurrencyPriceResponseData from .credit_bundle_purchase_response_data import CreditBundlePurchaseResponseData from .credit_company_grant_view import CreditCompanyGrantView + from .credit_currency_price import CreditCurrencyPrice from .credit_currency_price_request_body import CreditCurrencyPriceRequestBody from .credit_currency_price_response_data import CreditCurrencyPriceResponseData from .credit_event_ledger_response_data import CreditEventLedgerResponseData @@ -170,8 +178,11 @@ from .entity_trait_value import EntityTraitValue from .entity_type import EntityType from .environment_detail_response_data import EnvironmentDetailResponseData + from .environment_feature_usage_time_series_response_data import EnvironmentFeatureUsageTimeSeriesResponseData from .environment_response_data import EnvironmentResponseData + from .environment_trait_usage_time_series_response_data import EnvironmentTraitUsageTimeSeriesResponseData from .environment_type import EnvironmentType + from .environment_usage_point_response_data import EnvironmentUsagePointResponseData from .event_body import EventBody from .event_body_flag_check import EventBodyFlagCheck from .event_body_identify import EventBodyIdentify @@ -202,8 +213,21 @@ from .flag_type import FlagType from .flag_view import FlagView from .generic_preview_object import GenericPreviewObject + from .insights_summary_response_data import InsightsSummaryResponseData + from .integration_capabilities import IntegrationCapabilities + from .integration_config import ( + IntegrationConfig, + IntegrationConfig_Clerk, + IntegrationConfig_Orb, + IntegrationConfig_Stripe, + ) + from .integration_response_data import IntegrationResponseData + from .integration_state import IntegrationState from .integration_type import IntegrationType from .integration_webhook_url_response_data import IntegrationWebhookUrlResponseData + from .integrations_data_set_response_data import IntegrationsDataSetResponseData + from .integrations_list_response_data import IntegrationsListResponseData + from .integrations_response_data import IntegrationsResponseData from .invoice_request_body import InvoiceRequestBody from .invoice_response_data import InvoiceResponseData from .invoice_status import InvoiceStatus @@ -216,6 +240,8 @@ from .meter_request_body import MeterRequestBody from .metric_period import MetricPeriod from .metric_period_month_reset import MetricPeriodMonthReset + from .mrr_response_data import MrrResponseData + from .orb_integration_config import OrbIntegrationConfig from .ordered_plans_in_group import OrderedPlansInGroup from .payment_method_request_body import PaymentMethodRequestBody from .payment_method_response_data import PaymentMethodResponseData @@ -238,6 +264,8 @@ from .plan_group_plan_detail_response_data import PlanGroupPlanDetailResponseData from .plan_group_plan_entitlements_order import PlanGroupPlanEntitlementsOrder from .plan_group_response_data import PlanGroupResponseData + from .plan_growth_point_response_data import PlanGrowthPointResponseData + from .plan_growth_response_data import PlanGrowthResponseData from .plan_icon import PlanIcon from .plan_issue_response_data import PlanIssueResponseData from .plan_response_data import PlanResponseData @@ -303,17 +331,21 @@ from .skipped_entitlement_response_data import SkippedEntitlementResponseData from .sort_direction import SortDirection from .stripe_embed_info import StripeEmbedInfo + from .stripe_integration_config import StripeIntegrationConfig from .subscription_status import SubscriptionStatus from .subscription_trait_update import SubscriptionTraitUpdate from .subscription_type import SubscriptionType from .temporary_access_token_resource_type import TemporaryAccessTokenResourceType from .temporary_access_token_response_data import TemporaryAccessTokenResponseData from .time_series_granularity import TimeSeriesGranularity + from .top_feature_by_usage_response_data import TopFeatureByUsageResponseData + from .top_features_by_usage_response_data import TopFeaturesByUsageResponseData from .trait_definition import TraitDefinition from .trait_definition_comparable_type import TraitDefinitionComparableType from .trait_type import TraitType from .trial_status import TrialStatus from .update_add_on_request_body import UpdateAddOnRequestBody + from .update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody from .update_billing_plan_credit_grant_request_body import UpdateBillingPlanCreditGrantRequestBody from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody from .update_entitlement_req_common import UpdateEntitlementReqCommon @@ -345,9 +377,12 @@ "AccountMemberPermission": ".account_member_permission", "AccountMemberResponseData": ".account_member_response_data", "AccountMemberRole": ".account_member_role", + "ActivityEntryResponseData": ".activity_entry_response_data", + "ActivityResponseResponseData": ".activity_response_response_data", "ActorType": ".actor_type", "ApiError": ".api_error", "ApiKeyCreateResponseData": ".api_key_create_response_data", + "ApiKeyIntegrationResponseData": ".api_key_integration_response_data", "ApiKeyResponseData": ".api_key_response_data", "ApiKeyScope": ".api_key_scope", "AuditLogListResponseData": ".audit_log_list_response_data", @@ -407,13 +442,17 @@ "CheckoutDataResponseData": ".checkout_data_response_data", "CheckoutSettingsResponseData": ".checkout_settings_response_data", "CheckoutSubscription": ".checkout_subscription", + "ClerkIntegrationConfig": ".clerk_integration_config", + "CompanyCreditBalanceResponseData": ".company_credit_balance_response_data", "CompanyDetailResponseData": ".company_detail_response_data", "CompanyEventPeriodMetricsResponseData": ".company_event_period_metrics_response_data", "CompanyLedgerResponseData": ".company_ledger_response_data", + "CompanyMatchingCriteria": ".company_matching_criteria", "CompanyMembershipDetailResponseData": ".company_membership_detail_response_data", "CompanyMembershipResponseData": ".company_membership_response_data", "CompanyOverrideNoteResponseData": ".company_override_note_response_data", "CompanyOverrideResponseData": ".company_override_response_data", + "CompanyPlanCreditGrantView": ".company_plan_credit_grant_view", "CompanyPlanDetailResponseData": ".company_plan_detail_response_data", "CompanyPlanInvalidReason": ".company_plan_invalid_reason", "CompanyPlanWithBillingSubView": ".company_plan_with_billing_sub_view", @@ -458,6 +497,7 @@ "CreditBundleCurrencyPriceResponseData": ".credit_bundle_currency_price_response_data", "CreditBundlePurchaseResponseData": ".credit_bundle_purchase_response_data", "CreditCompanyGrantView": ".credit_company_grant_view", + "CreditCurrencyPrice": ".credit_currency_price", "CreditCurrencyPriceRequestBody": ".credit_currency_price_request_body", "CreditCurrencyPriceResponseData": ".credit_currency_price_response_data", "CreditEventLedgerResponseData": ".credit_event_ledger_response_data", @@ -506,8 +546,11 @@ "EntityTraitValue": ".entity_trait_value", "EntityType": ".entity_type", "EnvironmentDetailResponseData": ".environment_detail_response_data", + "EnvironmentFeatureUsageTimeSeriesResponseData": ".environment_feature_usage_time_series_response_data", "EnvironmentResponseData": ".environment_response_data", + "EnvironmentTraitUsageTimeSeriesResponseData": ".environment_trait_usage_time_series_response_data", "EnvironmentType": ".environment_type", + "EnvironmentUsagePointResponseData": ".environment_usage_point_response_data", "EventBody": ".event_body", "EventBodyFlagCheck": ".event_body_flag_check", "EventBodyIdentify": ".event_body_identify", @@ -538,8 +581,19 @@ "FlagType": ".flag_type", "FlagView": ".flag_view", "GenericPreviewObject": ".generic_preview_object", + "InsightsSummaryResponseData": ".insights_summary_response_data", + "IntegrationCapabilities": ".integration_capabilities", + "IntegrationConfig": ".integration_config", + "IntegrationConfig_Clerk": ".integration_config", + "IntegrationConfig_Orb": ".integration_config", + "IntegrationConfig_Stripe": ".integration_config", + "IntegrationResponseData": ".integration_response_data", + "IntegrationState": ".integration_state", "IntegrationType": ".integration_type", "IntegrationWebhookUrlResponseData": ".integration_webhook_url_response_data", + "IntegrationsDataSetResponseData": ".integrations_data_set_response_data", + "IntegrationsListResponseData": ".integrations_list_response_data", + "IntegrationsResponseData": ".integrations_response_data", "InvoiceRequestBody": ".invoice_request_body", "InvoiceResponseData": ".invoice_response_data", "InvoiceStatus": ".invoice_status", @@ -552,6 +606,8 @@ "MeterRequestBody": ".meter_request_body", "MetricPeriod": ".metric_period", "MetricPeriodMonthReset": ".metric_period_month_reset", + "MrrResponseData": ".mrr_response_data", + "OrbIntegrationConfig": ".orb_integration_config", "OrderedPlansInGroup": ".ordered_plans_in_group", "PaymentMethodRequestBody": ".payment_method_request_body", "PaymentMethodResponseData": ".payment_method_response_data", @@ -574,6 +630,8 @@ "PlanGroupPlanDetailResponseData": ".plan_group_plan_detail_response_data", "PlanGroupPlanEntitlementsOrder": ".plan_group_plan_entitlements_order", "PlanGroupResponseData": ".plan_group_response_data", + "PlanGrowthPointResponseData": ".plan_growth_point_response_data", + "PlanGrowthResponseData": ".plan_growth_response_data", "PlanIcon": ".plan_icon", "PlanIssueResponseData": ".plan_issue_response_data", "PlanResponseData": ".plan_response_data", @@ -639,17 +697,21 @@ "SkippedEntitlementResponseData": ".skipped_entitlement_response_data", "SortDirection": ".sort_direction", "StripeEmbedInfo": ".stripe_embed_info", + "StripeIntegrationConfig": ".stripe_integration_config", "SubscriptionStatus": ".subscription_status", "SubscriptionTraitUpdate": ".subscription_trait_update", "SubscriptionType": ".subscription_type", "TemporaryAccessTokenResourceType": ".temporary_access_token_resource_type", "TemporaryAccessTokenResponseData": ".temporary_access_token_response_data", "TimeSeriesGranularity": ".time_series_granularity", + "TopFeatureByUsageResponseData": ".top_feature_by_usage_response_data", + "TopFeaturesByUsageResponseData": ".top_features_by_usage_response_data", "TraitDefinition": ".trait_definition", "TraitDefinitionComparableType": ".trait_definition_comparable_type", "TraitType": ".trait_type", "TrialStatus": ".trial_status", "UpdateAddOnRequestBody": ".update_add_on_request_body", + "UpdateAutoTopupOverrideRequestBody": ".update_auto_topup_override_request_body", "UpdateBillingPlanCreditGrantRequestBody": ".update_billing_plan_credit_grant_request_body", "UpdateCreditBundleRequestBody": ".update_credit_bundle_request_body", "UpdateEntitlementReqCommon": ".update_entitlement_req_common", @@ -705,9 +767,12 @@ def __dir__(): "AccountMemberPermission", "AccountMemberResponseData", "AccountMemberRole", + "ActivityEntryResponseData", + "ActivityResponseResponseData", "ActorType", "ApiError", "ApiKeyCreateResponseData", + "ApiKeyIntegrationResponseData", "ApiKeyResponseData", "ApiKeyScope", "AuditLogListResponseData", @@ -767,13 +832,17 @@ def __dir__(): "CheckoutDataResponseData", "CheckoutSettingsResponseData", "CheckoutSubscription", + "ClerkIntegrationConfig", + "CompanyCreditBalanceResponseData", "CompanyDetailResponseData", "CompanyEventPeriodMetricsResponseData", "CompanyLedgerResponseData", + "CompanyMatchingCriteria", "CompanyMembershipDetailResponseData", "CompanyMembershipResponseData", "CompanyOverrideNoteResponseData", "CompanyOverrideResponseData", + "CompanyPlanCreditGrantView", "CompanyPlanDetailResponseData", "CompanyPlanInvalidReason", "CompanyPlanWithBillingSubView", @@ -818,6 +887,7 @@ def __dir__(): "CreditBundleCurrencyPriceResponseData", "CreditBundlePurchaseResponseData", "CreditCompanyGrantView", + "CreditCurrencyPrice", "CreditCurrencyPriceRequestBody", "CreditCurrencyPriceResponseData", "CreditEventLedgerResponseData", @@ -866,8 +936,11 @@ def __dir__(): "EntityTraitValue", "EntityType", "EnvironmentDetailResponseData", + "EnvironmentFeatureUsageTimeSeriesResponseData", "EnvironmentResponseData", + "EnvironmentTraitUsageTimeSeriesResponseData", "EnvironmentType", + "EnvironmentUsagePointResponseData", "EventBody", "EventBodyFlagCheck", "EventBodyIdentify", @@ -898,8 +971,19 @@ def __dir__(): "FlagType", "FlagView", "GenericPreviewObject", + "InsightsSummaryResponseData", + "IntegrationCapabilities", + "IntegrationConfig", + "IntegrationConfig_Clerk", + "IntegrationConfig_Orb", + "IntegrationConfig_Stripe", + "IntegrationResponseData", + "IntegrationState", "IntegrationType", "IntegrationWebhookUrlResponseData", + "IntegrationsDataSetResponseData", + "IntegrationsListResponseData", + "IntegrationsResponseData", "InvoiceRequestBody", "InvoiceResponseData", "InvoiceStatus", @@ -912,6 +996,8 @@ def __dir__(): "MeterRequestBody", "MetricPeriod", "MetricPeriodMonthReset", + "MrrResponseData", + "OrbIntegrationConfig", "OrderedPlansInGroup", "PaymentMethodRequestBody", "PaymentMethodResponseData", @@ -934,6 +1020,8 @@ def __dir__(): "PlanGroupPlanDetailResponseData", "PlanGroupPlanEntitlementsOrder", "PlanGroupResponseData", + "PlanGrowthPointResponseData", + "PlanGrowthResponseData", "PlanIcon", "PlanIssueResponseData", "PlanResponseData", @@ -999,17 +1087,21 @@ def __dir__(): "SkippedEntitlementResponseData", "SortDirection", "StripeEmbedInfo", + "StripeIntegrationConfig", "SubscriptionStatus", "SubscriptionTraitUpdate", "SubscriptionType", "TemporaryAccessTokenResourceType", "TemporaryAccessTokenResponseData", "TimeSeriesGranularity", + "TopFeatureByUsageResponseData", + "TopFeaturesByUsageResponseData", "TraitDefinition", "TraitDefinitionComparableType", "TraitType", "TrialStatus", "UpdateAddOnRequestBody", + "UpdateAutoTopupOverrideRequestBody", "UpdateBillingPlanCreditGrantRequestBody", "UpdateCreditBundleRequestBody", "UpdateEntitlementReqCommon", diff --git a/src/schematic/types/activity_entry_response_data.py b/src/schematic/types/activity_entry_response_data.py new file mode 100644 index 0000000..4abb612 --- /dev/null +++ b/src/schematic/types/activity_entry_response_data.py @@ -0,0 +1,25 @@ +# 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 ActivityEntryResponseData(UniversalBaseModel): + actor_name: str + method: str + resource_name: str + resource_type: str + timestamp: dt.datetime + title: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/activity_response_response_data.py b/src/schematic/types/activity_response_response_data.py new file mode 100644 index 0000000..258103a --- /dev/null +++ b/src/schematic/types/activity_response_response_data.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .activity_entry_response_data import ActivityEntryResponseData + + +class ActivityResponseResponseData(UniversalBaseModel): + entries: typing.List[ActivityEntryResponseData] + + 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/api_key_create_response_data.py b/src/schematic/types/api_key_create_response_data.py index d1ad347..0ab1183 100644 --- a/src/schematic/types/api_key_create_response_data.py +++ b/src/schematic/types/api_key_create_response_data.py @@ -5,6 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .api_key_integration_response_data import ApiKeyIntegrationResponseData from .api_key_scope import ApiKeyScope from .environment_response_data import EnvironmentResponseData @@ -15,6 +16,7 @@ class ApiKeyCreateResponseData(UniversalBaseModel): environment: typing.Optional[EnvironmentResponseData] = None environment_id: typing.Optional[str] = None id: str + integration: typing.Optional[ApiKeyIntegrationResponseData] = None last_used_at: typing.Optional[dt.datetime] = None name: str readonly: bool diff --git a/src/schematic/types/api_key_integration_response_data.py b/src/schematic/types/api_key_integration_response_data.py new file mode 100644 index 0000000..ba0fcd5 --- /dev/null +++ b/src/schematic/types/api_key_integration_response_data.py @@ -0,0 +1,23 @@ +# 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 .integration_state import IntegrationState +from .integration_type import IntegrationType + + +class ApiKeyIntegrationResponseData(UniversalBaseModel): + id: str + state: IntegrationState + type: IntegrationType + + 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/api_key_response_data.py b/src/schematic/types/api_key_response_data.py index 9e695b4..336483e 100644 --- a/src/schematic/types/api_key_response_data.py +++ b/src/schematic/types/api_key_response_data.py @@ -5,6 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .api_key_integration_response_data import ApiKeyIntegrationResponseData from .api_key_scope import ApiKeyScope from .environment_response_data import EnvironmentResponseData @@ -15,6 +16,7 @@ class ApiKeyResponseData(UniversalBaseModel): environment: typing.Optional[EnvironmentResponseData] = None environment_id: typing.Optional[str] = None id: str + integration: typing.Optional[ApiKeyIntegrationResponseData] = None last_used_at: typing.Optional[dt.datetime] = None name: str readonly: bool diff --git a/src/schematic/types/audit_log_list_response_data.py b/src/schematic/types/audit_log_list_response_data.py index 6fbedc4..e51fd09 100644 --- a/src/schematic/types/audit_log_list_response_data.py +++ b/src/schematic/types/audit_log_list_response_data.py @@ -6,11 +6,13 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .actor_type import ActorType +from .api_key_response_data import ApiKeyResponseData from .environment_response_data import EnvironmentResponseData class AuditLogListResponseData(UniversalBaseModel): actor_type: ActorType + api_key: typing.Optional[ApiKeyResponseData] = None api_key_id: typing.Optional[str] = None ended_at: typing.Optional[dt.datetime] = None environment: typing.Optional[EnvironmentResponseData] = None diff --git a/src/schematic/types/audit_log_response_data.py b/src/schematic/types/audit_log_response_data.py index b9bf233..f1932ca 100644 --- a/src/schematic/types/audit_log_response_data.py +++ b/src/schematic/types/audit_log_response_data.py @@ -6,11 +6,13 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .actor_type import ActorType +from .api_key_response_data import ApiKeyResponseData from .environment_response_data import EnvironmentResponseData class AuditLogResponseData(UniversalBaseModel): actor_type: ActorType + api_key: typing.Optional[ApiKeyResponseData] = None api_key_id: typing.Optional[str] = None ended_at: typing.Optional[dt.datetime] = None environment: typing.Optional[EnvironmentResponseData] = None diff --git a/src/schematic/types/billing_credit_bundle_view.py b/src/schematic/types/billing_credit_bundle_view.py index 9627de7..4554b25 100644 --- a/src/schematic/types/billing_credit_bundle_view.py +++ b/src/schematic/types/billing_credit_bundle_view.py @@ -20,7 +20,7 @@ class BillingCreditBundleView(UniversalBaseModel): credit_icon: typing.Optional[str] = None credit_id: str credit_name: str - currency_prices: typing.Optional[typing.List[CreditBundleCurrencyPrice]] = None + currency_prices: typing.List[CreditBundleCurrencyPrice] expiry_type: BillingCreditExpiryType expiry_unit: BillingCreditExpiryUnit expiry_unit_count: typing.Optional[int] = None diff --git a/src/schematic/types/billing_credit_view.py b/src/schematic/types/billing_credit_view.py index c1be42c..b4dca66 100644 --- a/src/schematic/types/billing_credit_view.py +++ b/src/schematic/types/billing_credit_view.py @@ -10,6 +10,7 @@ from .billing_credit_rollover_policy import BillingCreditRolloverPolicy from .billing_price_view import BillingPriceView from .billing_product_response_data import BillingProductResponseData +from .credit_currency_price import CreditCurrencyPrice class BillingCreditView(UniversalBaseModel): @@ -17,6 +18,7 @@ class BillingCreditView(UniversalBaseModel): burn_strategy: BillingCreditBurnStrategy cost_editable: bool created_at: dt.datetime + currency_prices: typing.List[CreditCurrencyPrice] default_expiry_unit: BillingCreditExpiryUnit default_expiry_unit_count: typing.Optional[int] = None default_rollover_policy: BillingCreditRolloverPolicy diff --git a/src/schematic/types/billing_plan_credit_grant_response_data.py b/src/schematic/types/billing_plan_credit_grant_response_data.py index 959a1e4..d026dda 100644 --- a/src/schematic/types/billing_plan_credit_grant_response_data.py +++ b/src/schematic/types/billing_plan_credit_grant_response_data.py @@ -21,6 +21,7 @@ class BillingPlanCreditGrantResponseData(UniversalBaseModel): auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = None auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = None auto_topup_expiry_unit_count: typing.Optional[int] = None + auto_topup_self_service: bool auto_topup_threshold_credits: typing.Optional[int] = None auto_topup_threshold_percent: typing.Optional[int] = None created_at: dt.datetime diff --git a/src/schematic/types/change_subscription_internal_request_body.py b/src/schematic/types/change_subscription_internal_request_body.py index d791bcc..37d09f0 100644 --- a/src/schematic/types/change_subscription_internal_request_body.py +++ b/src/schematic/types/change_subscription_internal_request_body.py @@ -5,12 +5,14 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .update_add_on_request_body import UpdateAddOnRequestBody +from .update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody from .update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody class ChangeSubscriptionInternalRequestBody(UniversalBaseModel): add_on_ids: typing.List[UpdateAddOnRequestBody] + auto_topup_overrides: typing.List[UpdateAutoTopupOverrideRequestBody] company_id: str coupon_external_id: typing.Optional[str] = None credit_bundles: typing.List[UpdateCreditBundleRequestBody] diff --git a/src/schematic/types/change_subscription_request_body.py b/src/schematic/types/change_subscription_request_body.py index 0452aba..50079f0 100644 --- a/src/schematic/types/change_subscription_request_body.py +++ b/src/schematic/types/change_subscription_request_body.py @@ -5,12 +5,14 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .update_add_on_request_body import UpdateAddOnRequestBody +from .update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody from .update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody class ChangeSubscriptionRequestBody(UniversalBaseModel): add_on_ids: typing.List[UpdateAddOnRequestBody] + auto_topup_overrides: typing.List[UpdateAutoTopupOverrideRequestBody] coupon_external_id: typing.Optional[str] = None credit_bundles: typing.List[UpdateCreditBundleRequestBody] new_plan_id: str diff --git a/src/schematic/types/clerk_integration_config.py b/src/schematic/types/clerk_integration_config.py new file mode 100644 index 0000000..c95fb4a --- /dev/null +++ b/src/schematic/types/clerk_integration_config.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ClerkIntegrationConfig(UniversalBaseModel): + first_events_received: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether Schematic has received the first webhook event from Clerk after install + """ + + webhook_url: typing.Optional[str] = pydantic.Field(default=None) + """ + URL configured on the Clerk webhook endpoint that delivers events to Schematic + """ + + 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/company_credit_balance_response_data.py b/src/schematic/types/company_credit_balance_response_data.py new file mode 100644 index 0000000..0abf080 --- /dev/null +++ b/src/schematic/types/company_credit_balance_response_data.py @@ -0,0 +1,23 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_provider_type import BillingProviderType + + +class CompanyCreditBalanceResponseData(UniversalBaseModel): + credit_id: str + remaining: float + source: BillingProviderType + total: typing.Optional[float] = 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/company_matching_criteria.py b/src/schematic/types/company_matching_criteria.py new file mode 100644 index 0000000..d5ce4bf --- /dev/null +++ b/src/schematic/types/company_matching_criteria.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +CompanyMatchingCriteria = typing.Union[typing.Literal["billing_meta_object", "manual_upsert"], typing.Any] diff --git a/src/schematic/types/company_plan_credit_grant_view.py b/src/schematic/types/company_plan_credit_grant_view.py new file mode 100644 index 0000000..4ca5df2 --- /dev/null +++ b/src/schematic/types/company_plan_credit_grant_view.py @@ -0,0 +1,78 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_credit_expiry_type import BillingCreditExpiryType +from .billing_credit_expiry_unit import BillingCreditExpiryUnit +from .billing_credit_view import BillingCreditView +from .billing_plan_credit_grant_reset_cadence import BillingPlanCreditGrantResetCadence +from .billing_plan_credit_grant_reset_start import BillingPlanCreditGrantResetStart +from .billing_plan_credit_grant_reset_type import BillingPlanCreditGrantResetType +from .generic_preview_object import GenericPreviewObject + + +class CompanyPlanCreditGrantView(UniversalBaseModel): + billing_credit_auto_topup_amount: typing.Optional[int] = None + billing_credit_auto_topup_amount_type: typing.Optional[str] = None + billing_credit_auto_topup_enabled: bool + billing_credit_auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = None + billing_credit_auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = None + billing_credit_auto_topup_expiry_unit_count: typing.Optional[int] = None + billing_credit_auto_topup_self_service: bool + billing_credit_auto_topup_threshold_credits: typing.Optional[int] = None + billing_credit_auto_topup_threshold_percent: typing.Optional[int] = None + company_auto_topup_amount: typing.Optional[int] = None + company_auto_topup_enabled: typing.Optional[bool] = None + company_auto_topup_threshold_credits: typing.Optional[int] = None + created_at: dt.datetime + credit: typing.Optional[BillingCreditView] = None + credit_amount: int + credit_description: str = pydantic.Field() + """ + Deprecated field, will be removed in the future. Use Credit.Description instead. + """ + + credit_icon: typing.Optional[str] = pydantic.Field(default=None) + """ + Deprecated field, will be removed in the future. Use Credit.Icon instead. + """ + + credit_id: str + credit_name: str = pydantic.Field() + """ + Deprecated field, will be removed in the future. Use Credit.Name instead. + """ + + expiry_type: typing.Optional[BillingCreditExpiryType] = None + expiry_unit: typing.Optional[BillingCreditExpiryUnit] = None + expiry_unit_count: typing.Optional[int] = None + id: str + plan: typing.Optional[GenericPreviewObject] = None + plan_id: str + plan_version_id: typing.Optional[str] = None + plural_name: typing.Optional[str] = pydantic.Field(default=None) + """ + Deprecated field, will be removed in the future. Use Credit.PluralName instead. + """ + + reset_cadence: typing.Optional[BillingPlanCreditGrantResetCadence] = None + reset_start: typing.Optional[BillingPlanCreditGrantResetStart] = None + reset_type: BillingPlanCreditGrantResetType + singular_name: typing.Optional[str] = pydantic.Field(default=None) + """ + Deprecated field, will be removed in the future. Use Credit.SingularName instead. + """ + + updated_at: dt.datetime + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/company_plan_with_billing_sub_view.py b/src/schematic/types/company_plan_with_billing_sub_view.py index e849243..a88ad12 100644 --- a/src/schematic/types/company_plan_with_billing_sub_view.py +++ b/src/schematic/types/company_plan_with_billing_sub_view.py @@ -5,7 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .plan_credit_grant_view import PlanCreditGrantView +from .company_plan_credit_grant_view import CompanyPlanCreditGrantView class CompanyPlanWithBillingSubView(UniversalBaseModel): @@ -15,7 +15,7 @@ class CompanyPlanWithBillingSubView(UniversalBaseModel): description: typing.Optional[str] = None id: str image_url: typing.Optional[str] = None - included_credit_grants: typing.List[PlanCreditGrantView] + included_credit_grants: typing.List[CompanyPlanCreditGrantView] name: str plan_period: typing.Optional[str] = None plan_price: typing.Optional[int] = None diff --git a/src/schematic/types/create_billing_plan_credit_grant_request_body.py b/src/schematic/types/create_billing_plan_credit_grant_request_body.py index 07257fe..400cd48 100644 --- a/src/schematic/types/create_billing_plan_credit_grant_request_body.py +++ b/src/schematic/types/create_billing_plan_credit_grant_request_body.py @@ -20,6 +20,7 @@ class CreateBillingPlanCreditGrantRequestBody(UniversalBaseModel): auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = None auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = None auto_topup_expiry_unit_count: typing.Optional[int] = None + auto_topup_self_service: typing.Optional[bool] = None auto_topup_threshold_credits: typing.Optional[int] = None auto_topup_threshold_percent: typing.Optional[int] = None credit_amount: int diff --git a/src/schematic/types/create_event_request_body.py b/src/schematic/types/create_event_request_body.py index cb1a451..0ff189b 100644 --- a/src/schematic/types/create_event_request_body.py +++ b/src/schematic/types/create_event_request_body.py @@ -16,6 +16,11 @@ class CreateEventRequestBody(UniversalBaseModel): Either 'identify' or 'track' """ + idempotency_key: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional client-supplied key. Duplicate events with the same key (scoped to the environment) are dropped for 24h. + """ + sent_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) """ Optionally provide a timestamp at which the event was sent to Schematic diff --git a/src/schematic/types/credit_currency_price.py b/src/schematic/types/credit_currency_price.py new file mode 100644 index 0000000..2e793b6 --- /dev/null +++ b/src/schematic/types/credit_currency_price.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .billing_price_view import BillingPriceView + + +class CreditCurrencyPrice(UniversalBaseModel): + currency: str + price: typing.Optional[BillingPriceView] = 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/data_event_payload.py b/src/schematic/types/data_event_payload.py index e57d74c..0356c58 100644 --- a/src/schematic/types/data_event_payload.py +++ b/src/schematic/types/data_event_payload.py @@ -11,6 +11,7 @@ class DataEventPayload(UniversalBaseModel): api_key: str body: typing.Optional[typing.Dict[str, typing.Any]] = None + idempotency_key: typing.Optional[str] = None sent_at: typing.Optional[dt.datetime] = None type: EventType diff --git a/src/schematic/types/duplicate_plan_entitlements_response_response_data.py b/src/schematic/types/duplicate_plan_entitlements_response_response_data.py index 5690c0a..5a0e7a1 100644 --- a/src/schematic/types/duplicate_plan_entitlements_response_response_data.py +++ b/src/schematic/types/duplicate_plan_entitlements_response_response_data.py @@ -5,11 +5,13 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .plan_entitlement_response_data import PlanEntitlementResponseData +from .plan_issue_response_data import PlanIssueResponseData from .skipped_entitlement_response_data import SkippedEntitlementResponseData class DuplicatePlanEntitlementsResponseResponseData(UniversalBaseModel): data: typing.List[PlanEntitlementResponseData] + issues: typing.List[PlanIssueResponseData] skipped: typing.List[SkippedEntitlementResponseData] if IS_PYDANTIC_V2: diff --git a/src/schematic/types/environment_feature_usage_time_series_response_data.py b/src/schematic/types/environment_feature_usage_time_series_response_data.py new file mode 100644 index 0000000..9698360 --- /dev/null +++ b/src/schematic/types/environment_feature_usage_time_series_response_data.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .environment_usage_point_response_data import EnvironmentUsagePointResponseData + + +class EnvironmentFeatureUsageTimeSeriesResponseData(UniversalBaseModel): + event_subtype: str + feature_id: str + points: typing.List[EnvironmentUsagePointResponseData] + + 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/environment_trait_usage_time_series_response_data.py b/src/schematic/types/environment_trait_usage_time_series_response_data.py new file mode 100644 index 0000000..70b313b --- /dev/null +++ b/src/schematic/types/environment_trait_usage_time_series_response_data.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .environment_usage_point_response_data import EnvironmentUsagePointResponseData + + +class EnvironmentTraitUsageTimeSeriesResponseData(UniversalBaseModel): + feature_id: str + points: typing.List[EnvironmentUsagePointResponseData] + trait_definition_id: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/environment_usage_point_response_data.py b/src/schematic/types/environment_usage_point_response_data.py new file mode 100644 index 0000000..ec99ab2 --- /dev/null +++ b/src/schematic/types/environment_usage_point_response_data.py @@ -0,0 +1,21 @@ +# 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 EnvironmentUsagePointResponseData(UniversalBaseModel): + timestamp: dt.datetime + usage: int + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/event_detail_response_data.py b/src/schematic/types/event_detail_response_data.py index e33657d..fa127c0 100644 --- a/src/schematic/types/event_detail_response_data.py +++ b/src/schematic/types/event_detail_response_data.py @@ -5,6 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .api_key_response_data import ApiKeyResponseData from .event_status import EventStatus from .event_type import EventType from .preview_object import PreviewObject @@ -12,6 +13,7 @@ class EventDetailResponseData(UniversalBaseModel): api_key: typing.Optional[str] = None + api_key_view: typing.Optional[ApiKeyResponseData] = None body: typing.Dict[str, typing.Any] body_preview: str captured_at: dt.datetime @@ -23,6 +25,7 @@ class EventDetailResponseData(UniversalBaseModel): feature_ids: typing.List[str] features: typing.List[PreviewObject] id: str + idempotency_key: typing.Optional[str] = None loaded_at: typing.Optional[dt.datetime] = None processed_at: typing.Optional[dt.datetime] = None quantity: int diff --git a/src/schematic/types/event_response_data.py b/src/schematic/types/event_response_data.py index e0c533c..a1cd727 100644 --- a/src/schematic/types/event_response_data.py +++ b/src/schematic/types/event_response_data.py @@ -20,6 +20,7 @@ class EventResponseData(UniversalBaseModel): error_message: typing.Optional[str] = None feature_ids: typing.List[str] id: str + idempotency_key: typing.Optional[str] = None loaded_at: typing.Optional[dt.datetime] = None processed_at: typing.Optional[dt.datetime] = None quantity: int diff --git a/src/schematic/types/insights_summary_response_data.py b/src/schematic/types/insights_summary_response_data.py new file mode 100644 index 0000000..345da1f --- /dev/null +++ b/src/schematic/types/insights_summary_response_data.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .mrr_response_data import MrrResponseData + + +class InsightsSummaryResponseData(UniversalBaseModel): + active_credits: float + mrr: typing.List[MrrResponseData] + paid_companies: int + total_companies: int + total_features: int + total_plans: int + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/integration_capabilities.py b/src/schematic/types/integration_capabilities.py new file mode 100644 index 0000000..9bce367 --- /dev/null +++ b/src/schematic/types/integration_capabilities.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class IntegrationCapabilities(UniversalBaseModel): + author_plans: bool + checkout: bool + edit_billing: 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/integration_config.py b/src/schematic/types/integration_config.py new file mode 100644 index 0000000..69c8bf9 --- /dev/null +++ b/src/schematic/types/integration_config.py @@ -0,0 +1,64 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class IntegrationConfig_Clerk(UniversalBaseModel): + type: typing.Literal["clerk"] = "clerk" + first_events_received: typing.Optional[bool] = None + webhook_url: 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 + + +class IntegrationConfig_Orb(UniversalBaseModel): + type: typing.Literal["orb"] = "orb" + external_customer_id_key: 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 + + +class IntegrationConfig_Stripe(UniversalBaseModel): + type: typing.Literal["stripe"] = "stripe" + account_id: typing.Optional[str] = None + account_name: typing.Optional[str] = None + company_update_only: typing.Optional[bool] = None + is_sandbox: bool + live_mode: bool + onboard_url: typing.Optional[str] = None + version: int + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +IntegrationConfig = typing_extensions.Annotated[ + typing.Union[IntegrationConfig_Clerk, IntegrationConfig_Orb, IntegrationConfig_Stripe], + pydantic.Field(discriminator="type"), +] diff --git a/src/schematic/types/integration_response_data.py b/src/schematic/types/integration_response_data.py new file mode 100644 index 0000000..aae8458 --- /dev/null +++ b/src/schematic/types/integration_response_data.py @@ -0,0 +1,26 @@ +# 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 .integration_state import IntegrationState +from .integration_type import IntegrationType + + +class IntegrationResponseData(UniversalBaseModel): + created_at: dt.datetime + id: str + state: IntegrationState + type: IntegrationType + updated_at: dt.datetime + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/integration_state.py b/src/schematic/types/integration_state.py new file mode 100644 index 0000000..46a4da2 --- /dev/null +++ b/src/schematic/types/integration_state.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +IntegrationState = typing.Union[typing.Literal["active", "created", "pending"], typing.Any] diff --git a/src/schematic/types/integrations_data_set_response_data.py b/src/schematic/types/integrations_data_set_response_data.py new file mode 100644 index 0000000..ad7a520 --- /dev/null +++ b/src/schematic/types/integrations_data_set_response_data.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class IntegrationsDataSetResponseData(UniversalBaseModel): + keys: typing.List[str] + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/integrations_list_response_data.py b/src/schematic/types/integrations_list_response_data.py new file mode 100644 index 0000000..121ba84 --- /dev/null +++ b/src/schematic/types/integrations_list_response_data.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .integration_capabilities import IntegrationCapabilities +from .integration_config import IntegrationConfig +from .integration_state import IntegrationState +from .integration_type import IntegrationType + + +class IntegrationsListResponseData(UniversalBaseModel): + capabilities: IntegrationCapabilities + config: typing.Optional[IntegrationConfig] = None + id: str + is_app_install: bool + is_connect_install: bool + state: IntegrationState + type: IntegrationType + + 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/integrations_response_data.py b/src/schematic/types/integrations_response_data.py new file mode 100644 index 0000000..ea85a0e --- /dev/null +++ b/src/schematic/types/integrations_response_data.py @@ -0,0 +1,26 @@ +# 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 .integration_state import IntegrationState +from .integration_type import IntegrationType + + +class IntegrationsResponseData(UniversalBaseModel): + created_at: dt.datetime + id: str + state: IntegrationState + type: IntegrationType + updated_at: dt.datetime + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/mrr_response_data.py b/src/schematic/types/mrr_response_data.py new file mode 100644 index 0000000..5e2743e --- /dev/null +++ b/src/schematic/types/mrr_response_data.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class MrrResponseData(UniversalBaseModel): + amount: int + currency: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/orb_integration_config.py b/src/schematic/types/orb_integration_config.py new file mode 100644 index 0000000..c175846 --- /dev/null +++ b/src/schematic/types/orb_integration_config.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class OrbIntegrationConfig(UniversalBaseModel): + external_customer_id_key: typing.Optional[str] = pydantic.Field(default=None) + """ + Schematic company key used to store Orb's external_customer_id; when unset, defaults to orb_external_customer_id + """ + + 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_credit_grant_view.py b/src/schematic/types/plan_credit_grant_view.py index 790f0a7..fe9d9a0 100644 --- a/src/schematic/types/plan_credit_grant_view.py +++ b/src/schematic/types/plan_credit_grant_view.py @@ -21,6 +21,7 @@ class PlanCreditGrantView(UniversalBaseModel): billing_credit_auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = None billing_credit_auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = None billing_credit_auto_topup_expiry_unit_count: typing.Optional[int] = None + billing_credit_auto_topup_self_service: bool billing_credit_auto_topup_threshold_credits: typing.Optional[int] = None billing_credit_auto_topup_threshold_percent: typing.Optional[int] = None created_at: dt.datetime diff --git a/src/schematic/types/plan_growth_point_response_data.py b/src/schematic/types/plan_growth_point_response_data.py new file mode 100644 index 0000000..bdb217b --- /dev/null +++ b/src/schematic/types/plan_growth_point_response_data.py @@ -0,0 +1,23 @@ +# 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 PlanGrowthPointResponseData(UniversalBaseModel): + month: dt.datetime + plan_id: str + plan_name: str + subscribers: int + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/plan_growth_response_data.py b/src/schematic/types/plan_growth_response_data.py new file mode 100644 index 0000000..e37209e --- /dev/null +++ b/src/schematic/types/plan_growth_response_data.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .plan_growth_point_response_data import PlanGrowthPointResponseData + + +class PlanGrowthResponseData(UniversalBaseModel): + points: typing.List[PlanGrowthPointResponseData] + + 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/rules_engine_schema_version.py b/src/schematic/types/rules_engine_schema_version.py index 8038eb4..9cca674 100644 --- a/src/schematic/types/rules_engine_schema_version.py +++ b/src/schematic/types/rules_engine_schema_version.py @@ -2,4 +2,4 @@ import typing -RulesEngineSchemaVersion = typing.Union[typing.Literal["vf05bf5da", "placeholder-for-fern-compatibility"], typing.Any] +RulesEngineSchemaVersion = typing.Union[typing.Literal["v97288f60", "placeholder-for-fern-compatibility"], typing.Any] diff --git a/src/schematic/types/stripe_integration_config.py b/src/schematic/types/stripe_integration_config.py new file mode 100644 index 0000000..b5268bc --- /dev/null +++ b/src/schematic/types/stripe_integration_config.py @@ -0,0 +1,52 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class StripeIntegrationConfig(UniversalBaseModel): + account_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Connected Stripe account ID (acct_*) + """ + + account_name: typing.Optional[str] = pydantic.Field(default=None) + """ + Display name of the connected Stripe account + """ + + company_update_only: typing.Optional[bool] = pydantic.Field(default=None) + """ + When importing Stripe customers, only update existing companies, do not create new companies + """ + + is_sandbox: bool = pydantic.Field() + """ + Whether the integration is connected to a Stripe sandbox account + """ + + live_mode: bool = pydantic.Field() + """ + Whether the integration is connected to a live Stripe account + """ + + onboard_url: typing.Optional[str] = pydantic.Field(default=None) + """ + Onboarding URL returned during the v2 (Connect) install flow before activation + """ + + version: int = pydantic.Field() + """ + Stripe integration config version (1 = legacy API key install, 2 = Connect/App install) + """ + + 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/top_feature_by_usage_response_data.py b/src/schematic/types/top_feature_by_usage_response_data.py new file mode 100644 index 0000000..0302779 --- /dev/null +++ b/src/schematic/types/top_feature_by_usage_response_data.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class TopFeatureByUsageResponseData(UniversalBaseModel): + change_pct: typing.Optional[float] = None + feature_id: str + feature_name: str + plural_name: typing.Optional[str] = None + prior_usage: int + usage: int + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/top_features_by_usage_response_data.py b/src/schematic/types/top_features_by_usage_response_data.py new file mode 100644 index 0000000..08c4152 --- /dev/null +++ b/src/schematic/types/top_features_by_usage_response_data.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .top_feature_by_usage_response_data import TopFeatureByUsageResponseData + + +class TopFeaturesByUsageResponseData(UniversalBaseModel): + features: typing.List[TopFeatureByUsageResponseData] + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/update_auto_topup_override_request_body.py b/src/schematic/types/update_auto_topup_override_request_body.py new file mode 100644 index 0000000..74f4fa2 --- /dev/null +++ b/src/schematic/types/update_auto_topup_override_request_body.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class UpdateAutoTopupOverrideRequestBody(UniversalBaseModel): + auto_topup_amount: typing.Optional[int] = None + auto_topup_enabled: typing.Optional[bool] = None + auto_topup_threshold_credits: typing.Optional[int] = None + plan_credit_grant_id: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/update_billing_plan_credit_grant_request_body.py b/src/schematic/types/update_billing_plan_credit_grant_request_body.py index 4f83d35..0a755d4 100644 --- a/src/schematic/types/update_billing_plan_credit_grant_request_body.py +++ b/src/schematic/types/update_billing_plan_credit_grant_request_body.py @@ -20,6 +20,7 @@ class UpdateBillingPlanCreditGrantRequestBody(UniversalBaseModel): auto_topup_expiry_type: typing.Optional[BillingCreditExpiryType] = None auto_topup_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = None auto_topup_expiry_unit_count: typing.Optional[int] = None + auto_topup_self_service: typing.Optional[bool] = None auto_topup_threshold_credits: typing.Optional[int] = None auto_topup_threshold_percent: typing.Optional[int] = None credit_amount: typing.Optional[int] = None