diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8e2df5a..b798809 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,7 @@ jobs: permissions: contents: read id-token: write - runs-on: depot-ubuntu-24.04 + runs-on: ${{ github.repository == 'stainless-sdks/openint-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} steps: - uses: actions/checkout@v4 diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 427b8ec..21f6056 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.9.0" + ".": "2.10.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 83e5743..0303ab3 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 20 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-b0f1cc110198f358326983457f50440f062a5cc7531eb0c5ed854e8bcc2eb78a.yml -openapi_spec_hash: 69a97c17db26ec2cc6da820a63baeb4f -config_hash: bc2ed32362cf85854a332d7ee8bdd35a +configured_endpoints: 23 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-2b8f2f26c935902e8db61d0ed193c7bc27d9295a9b803ab1dffbecff272d3df9.yml +openapi_spec_hash: 362f13d2f3cc90f94f41b27f7bb2d467 +config_hash: 4653b579bed6c8e88c01a1d40bfa0b41 diff --git a/CHANGELOG.md b/CHANGELOG.md index 0184344..2c77061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## 2.10.0 (2025-09-05) + +Full Changelog: [v2.9.0...v2.10.0](https://github.com/openintegrations/python-sdk/compare/v2.9.0...v2.10.0) + +### Features + +* **api:** adding preconnect ([3344695](https://github.com/openintegrations/python-sdk/commit/3344695e46661bed707c0a568123392ef59d094a)) +* **api:** casing ([e92ec04](https://github.com/openintegrations/python-sdk/commit/e92ec0402cbf32aa6278345e5daad14d39c30255)) +* **api:** org api updates ([d5af5d8](https://github.com/openintegrations/python-sdk/commit/d5af5d822322bc00c43778ecd388fcb1865ab778)) +* **api:** preconfigure, preconnect & rpc methods ([b34e94f](https://github.com/openintegrations/python-sdk/commit/b34e94febbd1048b02a79227728765a2b862338d)) +* **api:** renaming connectionConfigs ([b388433](https://github.com/openintegrations/python-sdk/commit/b388433332d18e139ff4d2ff5aa2f57edf4e4091)) +* improve future compat with pydantic v3 ([1193b57](https://github.com/openintegrations/python-sdk/commit/1193b57f35d7de48c4f823ba9e2f49a4098da5e0)) +* **types:** replace List[str] with SequenceNotStr in params ([c1996fe](https://github.com/openintegrations/python-sdk/commit/c1996fe4d4a7bd7d6018331a2935e369d982e037)) + + +### Bug Fixes + +* avoid newer type syntax ([a6c3bd3](https://github.com/openintegrations/python-sdk/commit/a6c3bd3d6ec3516064cca83ec66310b6a6ad327c)) + + +### Chores + +* **internal:** add Sequence related utils ([614f2d0](https://github.com/openintegrations/python-sdk/commit/614f2d0eb04ad768d4bee478e01be0cbbcd5c405)) +* **internal:** change ci workflow machines ([c7335da](https://github.com/openintegrations/python-sdk/commit/c7335da65b5ea21fd125b0d47d5aa7708a3e5df0)) +* **internal:** move mypy configurations to `pyproject.toml` file ([3353de9](https://github.com/openintegrations/python-sdk/commit/3353de9e526c20d6be9997fe93de2f3ab5c53d77)) +* **internal:** update pyright exclude list ([81cb316](https://github.com/openintegrations/python-sdk/commit/81cb316c7362c1a2304d4528dc1aa5e60b026392)) + ## 2.9.0 (2025-08-26) Full Changelog: [v2.8.0...v2.9.0](https://github.com/openintegrations/python-sdk/compare/v2.8.0...v2.9.0) diff --git a/api.md b/api.md index 7637276..7798e52 100644 --- a/api.md +++ b/api.md @@ -8,6 +8,7 @@ from openint.types import ( Integration, AssignConnectionResponse, CheckConnectionResponse, + ConnectorRpcResponse, CreateConnectionResponse, CreateConnnectorConfigResponse, CreateTokenResponse, @@ -18,12 +19,14 @@ from openint.types import ( GetConnectionResponse, GetCurrentUserResponse, ListAssignmentsResponse, - ListConnectionConfigsResponse, ListConnectionsResponse, + ListConnectorConfigsResponse, ListConnectorsResponse, ListConnnectorConfigsResponse, ListCustomersResponse, ListEventsResponse, + PreConfigureConnectorResponse, + PreConnectResponse, UpsertConnnectorConfigResponse, UpsertCustomerResponse, UpsertOrganizationResponse, @@ -32,24 +35,27 @@ from openint.types import ( Methods: -- client.assign_connection(repl_id, \*, id) -> AssignConnectionResponse +- client.assign_connection(repl_id, \*, id) -> AssignConnectionResponse - client.check_connection(id) -> CheckConnectionResponse +- client.connector_rpc(function_name, \*, connector_config_id, \*\*params) -> ConnectorRpcResponse - client.create_connection(\*\*params) -> CreateConnectionResponse - client.create_connnector_config(\*\*params) -> CreateConnnectorConfigResponse - client.create_token(customer_id, \*\*params) -> CreateTokenResponse -- client.delete_assignment(repl_id, \*, id) -> DeleteAssignmentResponse +- client.delete_assignment(repl_id, \*, id) -> DeleteAssignmentResponse - client.delete_connection(id) -> DeleteConnectionResponse - client.delete_connector_config(id) -> DeleteConnectorConfigResponse - client.get_conector_config(id, \*\*params) -> GetConectorConfigResponse - client.get_connection(id, \*\*params) -> GetConnectionResponse - client.get_current_user() -> GetCurrentUserResponse - client.list_assignments(id) -> ListAssignmentsResponse -- client.list_connection_configs(\*\*params) -> SyncOffsetPagination[ListConnectionConfigsResponse] - client.list_connections(\*\*params) -> SyncOffsetPagination[ListConnectionsResponse] +- client.list_connector_configs(\*\*params) -> SyncOffsetPagination[ListConnectorConfigsResponse] - client.list_connectors(\*\*params) -> SyncOffsetPagination[ListConnectorsResponse] - client.list_connnector_configs(\*\*params) -> SyncOffsetPagination[ListConnnectorConfigsResponse] - client.list_customers(\*\*params) -> SyncOffsetPagination[ListCustomersResponse] - client.list_events(\*\*params) -> SyncOffsetPagination[ListEventsResponse] +- client.pre_configure_connector(\*\*params) -> PreConfigureConnectorResponse +- client.pre_connect(\*\*params) -> PreConnectResponse - client.upsert_connnector_config(id, \*\*params) -> UpsertConnnectorConfigResponse - client.upsert_customer(\*\*params) -> UpsertCustomerResponse -- client.upsert_organization(org_id) -> UpsertOrganizationResponse +- client.upsert_organization(org_id) -> UpsertOrganizationResponse diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index 19f0e12..0000000 --- a/mypy.ini +++ /dev/null @@ -1,50 +0,0 @@ -[mypy] -pretty = True -show_error_codes = True - -# Exclude _files.py because mypy isn't smart enough to apply -# the correct type narrowing and as this is an internal module -# it's fine to just use Pyright. -# -# We also exclude our `tests` as mypy doesn't always infer -# types correctly and Pyright will still catch any type errors. -exclude = ^(src/openint/_files\.py|_dev/.*\.py|tests/.*)$ - -strict_equality = True -implicit_reexport = True -check_untyped_defs = True -no_implicit_optional = True - -warn_return_any = True -warn_unreachable = True -warn_unused_configs = True - -# Turn these options off as it could cause conflicts -# with the Pyright options. -warn_unused_ignores = False -warn_redundant_casts = False - -disallow_any_generics = True -disallow_untyped_defs = True -disallow_untyped_calls = True -disallow_subclassing_any = True -disallow_incomplete_defs = True -disallow_untyped_decorators = True -cache_fine_grained = True - -# By default, mypy reports an error if you assign a value to the result -# of a function call that doesn't return anything. We do this in our test -# cases: -# ``` -# result = ... -# assert result is None -# ``` -# Changing this codegen to make mypy happy would increase complexity -# and would not be worth it. -disable_error_code = func-returns-value,overload-cannot-match - -# https://github.com/python/mypy/issues/12162 -[mypy.overrides] -module = "black.files.*" -ignore_errors = true -ignore_missing_imports = true diff --git a/pyproject.toml b/pyproject.toml index cc95b84..2fbd742 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openint" -version = "2.9.0" +version = "2.10.0" description = "The official Python library for the Openint API" dynamic = ["readme"] license = "Apache-2.0" @@ -148,6 +148,7 @@ exclude = [ "_dev", ".venv", ".nox", + ".git", ] reportImplicitOverride = true @@ -156,6 +157,58 @@ reportOverlappingOverload = false reportImportCycles = false reportPrivateUsage = false +[tool.mypy] +pretty = true +show_error_codes = true + +# Exclude _files.py because mypy isn't smart enough to apply +# the correct type narrowing and as this is an internal module +# it's fine to just use Pyright. +# +# We also exclude our `tests` as mypy doesn't always infer +# types correctly and Pyright will still catch any type errors. +exclude = ['src/openint/_files.py', '_dev/.*.py', 'tests/.*'] + +strict_equality = true +implicit_reexport = true +check_untyped_defs = true +no_implicit_optional = true + +warn_return_any = true +warn_unreachable = true +warn_unused_configs = true + +# Turn these options off as it could cause conflicts +# with the Pyright options. +warn_unused_ignores = false +warn_redundant_casts = false + +disallow_any_generics = true +disallow_untyped_defs = true +disallow_untyped_calls = true +disallow_subclassing_any = true +disallow_incomplete_defs = true +disallow_untyped_decorators = true +cache_fine_grained = true + +# By default, mypy reports an error if you assign a value to the result +# of a function call that doesn't return anything. We do this in our test +# cases: +# ``` +# result = ... +# assert result is None +# ``` +# Changing this codegen to make mypy happy would increase complexity +# and would not be worth it. +disable_error_code = "func-returns-value,overload-cannot-match" + +# https://github.com/python/mypy/issues/12162 +[[tool.mypy.overrides]] +module = "black.files.*" +ignore_errors = true +ignore_missing_imports = true + + [tool.ruff] line-length = 120 output-format = "grouped" diff --git a/src/openint/_base_client.py b/src/openint/_base_client.py index c422d1a..8a0bf4a 100644 --- a/src/openint/_base_client.py +++ b/src/openint/_base_client.py @@ -59,7 +59,7 @@ ModelBuilderProtocol, ) from ._utils import is_dict, is_list, asyncify, is_given, lru_cache, is_mapping -from ._compat import PYDANTIC_V2, model_copy, model_dump +from ._compat import PYDANTIC_V1, model_copy, model_dump from ._models import GenericModel, FinalRequestOptions, validate_type, construct_type from ._response import ( APIResponse, @@ -232,7 +232,7 @@ def _set_private_attributes( model: Type[_T], options: FinalRequestOptions, ) -> None: - if PYDANTIC_V2 and getattr(self, "__pydantic_private__", None) is None: + if (not PYDANTIC_V1) and getattr(self, "__pydantic_private__", None) is None: self.__pydantic_private__ = {} self._model = model @@ -320,7 +320,7 @@ def _set_private_attributes( client: AsyncAPIClient, options: FinalRequestOptions, ) -> None: - if PYDANTIC_V2 and getattr(self, "__pydantic_private__", None) is None: + if (not PYDANTIC_V1) and getattr(self, "__pydantic_private__", None) is None: self.__pydantic_private__ = {} self._model = model diff --git a/src/openint/_client.py b/src/openint/_client.py index e4be7d0..8056bbc 100644 --- a/src/openint/_client.py +++ b/src/openint/_client.py @@ -12,7 +12,9 @@ from ._qs import Querystring from .types import ( client_list_events_params, + client_pre_connect_params, client_create_token_params, + client_connector_rpc_params, client_get_connection_params, client_list_customers_params, client_list_connectors_params, @@ -20,8 +22,9 @@ client_list_connections_params, client_create_connection_params, client_get_conector_config_params, - client_list_connection_configs_params, + client_list_connector_configs_params, client_list_connnector_configs_params, + client_pre_configure_connector_params, client_create_connnector_config_params, client_upsert_connnector_config_params, ) @@ -36,6 +39,7 @@ Transport, ProxiesTypes, RequestOptions, + SequenceNotStr, ) from ._utils import ( is_given, @@ -61,7 +65,9 @@ make_request_options, ) from .types.list_events_response import ListEventsResponse +from .types.pre_connect_response import PreConnectResponse from .types.create_token_response import CreateTokenResponse +from .types.connector_rpc_response import ConnectorRpcResponse from .types.get_connection_response import GetConnectionResponse from .types.list_customers_response import ListCustomersResponse from .types.list_connectors_response import ListConnectorsResponse @@ -76,9 +82,10 @@ from .types.delete_connection_response import DeleteConnectionResponse from .types.get_conector_config_response import GetConectorConfigResponse from .types.upsert_organization_response import UpsertOrganizationResponse +from .types.list_connector_configs_response import ListConnectorConfigsResponse from .types.delete_connector_config_response import DeleteConnectorConfigResponse -from .types.list_connection_configs_response import ListConnectionConfigsResponse from .types.list_connnector_configs_response import ListConnnectorConfigsResponse +from .types.pre_configure_connector_response import PreConfigureConnectorResponse from .types.create_connnector_config_response import CreateConnnectorConfigResponse from .types.upsert_connnector_config_response import UpsertConnnectorConfigResponse @@ -301,6 +308,50 @@ def check_connection( cast_to=CheckConnectionResponse, ) + def connector_rpc( + self, + function_name: str, + *, + connector_config_id: str, + input: Dict[str, object], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ConnectorRpcResponse: + """ + Execute RPC function on connector + + Args: + connector_config_id: The id of the connector config, starts with `ccfg_` + + function_name: RPC function name to execute + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not connector_config_id: + raise ValueError( + f"Expected a non-empty value for `connector_config_id` but received {connector_config_id!r}" + ) + if not function_name: + raise ValueError(f"Expected a non-empty value for `function_name` but received {function_name!r}") + return self.post( + f"/v2/connector-config/{connector_config_id}/rpc/{function_name}", + body=maybe_transform({"input": input}, client_connector_rpc_params.ClientConnectorRpcParams), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ConnectorRpcResponse, + ) + def create_connection( self, *, @@ -722,9 +773,11 @@ def list_assignments( cast_to=ListAssignmentsResponse, ) - def list_connection_configs( + def list_connections( self, *, + connection_ids: SequenceNotStr[str] | NotGiven = NOT_GIVEN, + connector_config_id: str | NotGiven = NOT_GIVEN, connector_names: List[ Literal[ "accelo", @@ -855,6 +908,7 @@ def list_connection_configs( "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", @@ -901,25 +955,42 @@ def list_connection_configs( ] ] | NotGiven = NOT_GIVEN, - expand: List[Literal["connector", "connector.schemas", "connection_count"]] | NotGiven = NOT_GIVEN, + customer_id: str | NotGiven = NOT_GIVEN, + expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, + include_secrets: bool | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, - search_query: Optional[str] | NotGiven = NOT_GIVEN, + refresh_policy: Literal["none", "force", "auto"] | NotGiven = NOT_GIVEN, + repl_id: str | NotGiven = NOT_GIVEN, + search_query: str | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> SyncOffsetPagination[ListConnectionConfigsResponse]: - """ - List Configured Connectors + ) -> SyncOffsetPagination[ListConnectionsResponse]: + """List all connections with optional filtering. + + Does not retrieve secrets or + perform any connection healthcheck. For that use `getConnection` or + `checkConnectionHealth`. Args: + connector_config_id: The id of the connector config, starts with `ccfg_` + + customer_id: The id of the customer in your application. Ensure it is unique for that + customer. + + expand: Expand the response with additional optionals + limit: Limit the number of items returned offset: Offset the items returned + refresh_policy: Controls credential refresh: none (never), force (always), or auto (when + expired, default) + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -929,8 +1000,8 @@ def list_connection_configs( timeout: Override the client-level default timeout for this request, in seconds """ return self.get_api_list( - "/v2/connector-config", - page=SyncOffsetPagination[ListConnectionConfigsResponse], + "/v2/connection", + page=SyncOffsetPagination[ListConnectionsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -938,25 +1009,27 @@ def list_connection_configs( timeout=timeout, query=maybe_transform( { + "connection_ids": connection_ids, + "connector_config_id": connector_config_id, "connector_names": connector_names, + "customer_id": customer_id, "expand": expand, + "include_secrets": include_secrets, "limit": limit, "offset": offset, + "refresh_policy": refresh_policy, + "repl_id": repl_id, "search_query": search_query, }, - client_list_connection_configs_params.ClientListConnectionConfigsParams, + client_list_connections_params.ClientListConnectionsParams, ), ), - model=cast( - Any, ListConnectionConfigsResponse - ), # Union types cannot be passed in as arguments in the type system + model=cast(Any, ListConnectionsResponse), # Union types cannot be passed in as arguments in the type system ) - def list_connections( + def list_connector_configs( self, *, - connection_ids: List[str] | NotGiven = NOT_GIVEN, - connector_config_id: str | NotGiven = NOT_GIVEN, connector_names: List[ Literal[ "accelo", @@ -1087,6 +1160,7 @@ def list_connections( "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", @@ -1133,42 +1207,25 @@ def list_connections( ] ] | NotGiven = NOT_GIVEN, - customer_id: str | NotGiven = NOT_GIVEN, - expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, - include_secrets: bool | NotGiven = NOT_GIVEN, + expand: List[Literal["connector", "connector.schemas", "connection_count"]] | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, - refresh_policy: Literal["none", "force", "auto"] | NotGiven = NOT_GIVEN, - repl_id: str | NotGiven = NOT_GIVEN, - search_query: str | NotGiven = NOT_GIVEN, + search_query: Optional[str] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> SyncOffsetPagination[ListConnectionsResponse]: - """List all connections with optional filtering. - - Does not retrieve secrets or - perform any connection healthcheck. For that use `getConnection` or - `checkConnectionHealth`. + ) -> SyncOffsetPagination[ListConnectorConfigsResponse]: + """ + List Configured Connectors Args: - connector_config_id: The id of the connector config, starts with `ccfg_` - - customer_id: The id of the customer in your application. Ensure it is unique for that - customer. - - expand: Expand the response with additional optionals - limit: Limit the number of items returned offset: Offset the items returned - refresh_policy: Controls credential refresh: none (never), force (always), or auto (when - expired, default) - extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -1178,8 +1235,8 @@ def list_connections( timeout: Override the client-level default timeout for this request, in seconds """ return self.get_api_list( - "/v2/connection", - page=SyncOffsetPagination[ListConnectionsResponse], + "/v2/connector-config", + page=SyncOffsetPagination[ListConnectorConfigsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -1187,22 +1244,18 @@ def list_connections( timeout=timeout, query=maybe_transform( { - "connection_ids": connection_ids, - "connector_config_id": connector_config_id, "connector_names": connector_names, - "customer_id": customer_id, "expand": expand, - "include_secrets": include_secrets, "limit": limit, "offset": offset, - "refresh_policy": refresh_policy, - "repl_id": repl_id, "search_query": search_query, }, - client_list_connections_params.ClientListConnectionsParams, + client_list_connector_configs_params.ClientListConnectorConfigsParams, ), ), - model=cast(Any, ListConnectionsResponse), # Union types cannot be passed in as arguments in the type system + model=cast( + Any, ListConnectorConfigsResponse + ), # Union types cannot be passed in as arguments in the type system ) def list_connectors( @@ -1389,6 +1442,7 @@ def list_connnector_configs( "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", @@ -1588,6 +1642,261 @@ def list_events( model=cast(Any, ListEventsResponse), # Union types cannot be passed in as arguments in the type system ) + def pre_configure_connector( + self, + *, + connector_name: Literal[ + "accelo", + "acme-apikey", + "acme-oauth2", + "adobe", + "adyen", + "aircall", + "airtable", + "amazon", + "apaleo", + "apollo", + "asana", + "attio", + "auth0", + "autodesk", + "aws", + "bamboohr", + "basecamp", + "battlenet", + "bigcommerce", + "bitbucket", + "bitly", + "blackbaud", + "boldsign", + "box", + "braintree", + "brex", + "calendly", + "clickup", + "close", + "coda", + "confluence", + "contentful", + "contentstack", + "copper", + "coros", + "datev", + "deel", + "dialpad", + "digitalocean", + "discord", + "docusign", + "dropbox", + "ebay", + "egnyte", + "envoy", + "eventbrite", + "exist", + "facebook", + "factorial", + "figma", + "finch", + "firebase", + "fitbit", + "foreceipt", + "fortnox", + "freshbooks", + "front", + "github", + "gitlab", + "gong", + "google-calendar", + "google-docs", + "google-drive", + "google-mail", + "google-sheet", + "gorgias", + "grain", + "greenhouse", + "gumroad", + "gusto", + "harvest", + "heron", + "highlevel", + "hubspot", + "instagram", + "intercom", + "jira", + "keap", + "lever", + "linear", + "linkedin", + "linkhut", + "lunchmoney", + "mailchimp", + "mercury", + "merge", + "miro", + "monday", + "moota", + "mural", + "namely", + "nationbuilder", + "netsuite", + "notion", + "odoo", + "okta", + "onebrick", + "openledger", + "osu", + "oura", + "outreach", + "pagerduty", + "pandadoc", + "payfit", + "paypal", + "pennylane", + "pinterest", + "pipedrive", + "plaid", + "podium", + "postgres", + "productboard", + "qualtrics", + "quickbooks", + "ramp", + "reddit", + "sage", + "salesforce", + "salesloft", + "saltedge", + "segment", + "servicem8", + "servicenow", + "sharepoint", + "sharepoint-onprem", + "shopify", + "signnow", + "slack", + "slack-agent", + "smartsheet", + "snowflake", + "splitwise", + "spotify", + "squarespace", + "squareup", + "stackexchange", + "strava", + "stripe", + "teamwork", + "teller", + "ticktick", + "timely", + "todoist", + "toggl", + "tremendous", + "tsheetsteam", + "tumblr", + "twenty", + "twinfield", + "twitch", + "twitter", + "typeform", + "uber", + "venmo", + "vimeo", + "wakatime", + "wealthbox", + "webflow", + "whoop", + "wise", + "wordpress", + "wrike", + "xero", + "yahoo", + "yandex", + "yodlee", + "zapier", + "zendesk", + "zenefits", + "zoho", + "zoho-desk", + "zoom", + ], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> PreConfigureConnectorResponse: + """ + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return self.post( + "/v2/connector-config/pre-configure", + body=maybe_transform( + {"connector_name": connector_name}, + client_pre_configure_connector_params.ClientPreConfigureConnectorParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=PreConfigureConnectorResponse, + ) + + def pre_connect( + self, + *, + connector_config_id: str, + discriminated_data: client_pre_connect_params.DiscriminatedData, + options: client_pre_connect_params.Options, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> PreConnectResponse: + """Args: + connector_config_id: Must correspond to data.connector_name. + + Technically id should imply + connector_name already but there is no way to specify a discriminated union with + id alone. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return cast( + PreConnectResponse, + self.post( + "/v1/connect/pre-connect", + body=maybe_transform( + { + "connector_config_id": connector_config_id, + "discriminated_data": discriminated_data, + "options": options, + }, + client_pre_connect_params.ClientPreConnectParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=cast( + Any, PreConnectResponse + ), # Union types cannot be passed in as arguments in the type system + ), + ) + def upsert_connnector_config( self, id: str, @@ -1960,6 +2269,50 @@ async def check_connection( cast_to=CheckConnectionResponse, ) + async def connector_rpc( + self, + function_name: str, + *, + connector_config_id: str, + input: Dict[str, object], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ConnectorRpcResponse: + """ + Execute RPC function on connector + + Args: + connector_config_id: The id of the connector config, starts with `ccfg_` + + function_name: RPC function name to execute + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not connector_config_id: + raise ValueError( + f"Expected a non-empty value for `connector_config_id` but received {connector_config_id!r}" + ) + if not function_name: + raise ValueError(f"Expected a non-empty value for `function_name` but received {function_name!r}") + return await self.post( + f"/v2/connector-config/{connector_config_id}/rpc/{function_name}", + body=await async_maybe_transform({"input": input}, client_connector_rpc_params.ClientConnectorRpcParams), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ConnectorRpcResponse, + ) + async def create_connection( self, *, @@ -2381,9 +2734,11 @@ async def list_assignments( cast_to=ListAssignmentsResponse, ) - def list_connection_configs( + def list_connections( self, *, + connection_ids: SequenceNotStr[str] | NotGiven = NOT_GIVEN, + connector_config_id: str | NotGiven = NOT_GIVEN, connector_names: List[ Literal[ "accelo", @@ -2514,6 +2869,7 @@ def list_connection_configs( "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", @@ -2560,25 +2916,42 @@ def list_connection_configs( ] ] | NotGiven = NOT_GIVEN, - expand: List[Literal["connector", "connector.schemas", "connection_count"]] | NotGiven = NOT_GIVEN, + customer_id: str | NotGiven = NOT_GIVEN, + expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, + include_secrets: bool | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, - search_query: Optional[str] | NotGiven = NOT_GIVEN, + refresh_policy: Literal["none", "force", "auto"] | NotGiven = NOT_GIVEN, + repl_id: str | NotGiven = NOT_GIVEN, + search_query: str | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> AsyncPaginator[ListConnectionConfigsResponse, AsyncOffsetPagination[ListConnectionConfigsResponse]]: - """ - List Configured Connectors + ) -> AsyncPaginator[ListConnectionsResponse, AsyncOffsetPagination[ListConnectionsResponse]]: + """List all connections with optional filtering. + + Does not retrieve secrets or + perform any connection healthcheck. For that use `getConnection` or + `checkConnectionHealth`. Args: + connector_config_id: The id of the connector config, starts with `ccfg_` + + customer_id: The id of the customer in your application. Ensure it is unique for that + customer. + + expand: Expand the response with additional optionals + limit: Limit the number of items returned offset: Offset the items returned + refresh_policy: Controls credential refresh: none (never), force (always), or auto (when + expired, default) + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -2588,8 +2961,8 @@ def list_connection_configs( timeout: Override the client-level default timeout for this request, in seconds """ return self.get_api_list( - "/v2/connector-config", - page=AsyncOffsetPagination[ListConnectionConfigsResponse], + "/v2/connection", + page=AsyncOffsetPagination[ListConnectionsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -2597,25 +2970,27 @@ def list_connection_configs( timeout=timeout, query=maybe_transform( { + "connection_ids": connection_ids, + "connector_config_id": connector_config_id, "connector_names": connector_names, + "customer_id": customer_id, "expand": expand, + "include_secrets": include_secrets, "limit": limit, "offset": offset, + "refresh_policy": refresh_policy, + "repl_id": repl_id, "search_query": search_query, }, - client_list_connection_configs_params.ClientListConnectionConfigsParams, + client_list_connections_params.ClientListConnectionsParams, ), ), - model=cast( - Any, ListConnectionConfigsResponse - ), # Union types cannot be passed in as arguments in the type system + model=cast(Any, ListConnectionsResponse), # Union types cannot be passed in as arguments in the type system ) - def list_connections( + def list_connector_configs( self, *, - connection_ids: List[str] | NotGiven = NOT_GIVEN, - connector_config_id: str | NotGiven = NOT_GIVEN, connector_names: List[ Literal[ "accelo", @@ -2746,6 +3121,7 @@ def list_connections( "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", @@ -2792,42 +3168,25 @@ def list_connections( ] ] | NotGiven = NOT_GIVEN, - customer_id: str | NotGiven = NOT_GIVEN, - expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, - include_secrets: bool | NotGiven = NOT_GIVEN, + expand: List[Literal["connector", "connector.schemas", "connection_count"]] | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, - refresh_policy: Literal["none", "force", "auto"] | NotGiven = NOT_GIVEN, - repl_id: str | NotGiven = NOT_GIVEN, - search_query: str | NotGiven = NOT_GIVEN, + search_query: Optional[str] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> AsyncPaginator[ListConnectionsResponse, AsyncOffsetPagination[ListConnectionsResponse]]: - """List all connections with optional filtering. - - Does not retrieve secrets or - perform any connection healthcheck. For that use `getConnection` or - `checkConnectionHealth`. + ) -> AsyncPaginator[ListConnectorConfigsResponse, AsyncOffsetPagination[ListConnectorConfigsResponse]]: + """ + List Configured Connectors Args: - connector_config_id: The id of the connector config, starts with `ccfg_` - - customer_id: The id of the customer in your application. Ensure it is unique for that - customer. - - expand: Expand the response with additional optionals - limit: Limit the number of items returned offset: Offset the items returned - refresh_policy: Controls credential refresh: none (never), force (always), or auto (when - expired, default) - extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -2837,8 +3196,8 @@ def list_connections( timeout: Override the client-level default timeout for this request, in seconds """ return self.get_api_list( - "/v2/connection", - page=AsyncOffsetPagination[ListConnectionsResponse], + "/v2/connector-config", + page=AsyncOffsetPagination[ListConnectorConfigsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -2846,22 +3205,18 @@ def list_connections( timeout=timeout, query=maybe_transform( { - "connection_ids": connection_ids, - "connector_config_id": connector_config_id, "connector_names": connector_names, - "customer_id": customer_id, "expand": expand, - "include_secrets": include_secrets, "limit": limit, "offset": offset, - "refresh_policy": refresh_policy, - "repl_id": repl_id, "search_query": search_query, }, - client_list_connections_params.ClientListConnectionsParams, + client_list_connector_configs_params.ClientListConnectorConfigsParams, ), ), - model=cast(Any, ListConnectionsResponse), # Union types cannot be passed in as arguments in the type system + model=cast( + Any, ListConnectorConfigsResponse + ), # Union types cannot be passed in as arguments in the type system ) def list_connectors( @@ -3048,6 +3403,7 @@ def list_connnector_configs( "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", @@ -3247,6 +3603,261 @@ def list_events( model=cast(Any, ListEventsResponse), # Union types cannot be passed in as arguments in the type system ) + async def pre_configure_connector( + self, + *, + connector_name: Literal[ + "accelo", + "acme-apikey", + "acme-oauth2", + "adobe", + "adyen", + "aircall", + "airtable", + "amazon", + "apaleo", + "apollo", + "asana", + "attio", + "auth0", + "autodesk", + "aws", + "bamboohr", + "basecamp", + "battlenet", + "bigcommerce", + "bitbucket", + "bitly", + "blackbaud", + "boldsign", + "box", + "braintree", + "brex", + "calendly", + "clickup", + "close", + "coda", + "confluence", + "contentful", + "contentstack", + "copper", + "coros", + "datev", + "deel", + "dialpad", + "digitalocean", + "discord", + "docusign", + "dropbox", + "ebay", + "egnyte", + "envoy", + "eventbrite", + "exist", + "facebook", + "factorial", + "figma", + "finch", + "firebase", + "fitbit", + "foreceipt", + "fortnox", + "freshbooks", + "front", + "github", + "gitlab", + "gong", + "google-calendar", + "google-docs", + "google-drive", + "google-mail", + "google-sheet", + "gorgias", + "grain", + "greenhouse", + "gumroad", + "gusto", + "harvest", + "heron", + "highlevel", + "hubspot", + "instagram", + "intercom", + "jira", + "keap", + "lever", + "linear", + "linkedin", + "linkhut", + "lunchmoney", + "mailchimp", + "mercury", + "merge", + "miro", + "monday", + "moota", + "mural", + "namely", + "nationbuilder", + "netsuite", + "notion", + "odoo", + "okta", + "onebrick", + "openledger", + "osu", + "oura", + "outreach", + "pagerduty", + "pandadoc", + "payfit", + "paypal", + "pennylane", + "pinterest", + "pipedrive", + "plaid", + "podium", + "postgres", + "productboard", + "qualtrics", + "quickbooks", + "ramp", + "reddit", + "sage", + "salesforce", + "salesloft", + "saltedge", + "segment", + "servicem8", + "servicenow", + "sharepoint", + "sharepoint-onprem", + "shopify", + "signnow", + "slack", + "slack-agent", + "smartsheet", + "snowflake", + "splitwise", + "spotify", + "squarespace", + "squareup", + "stackexchange", + "strava", + "stripe", + "teamwork", + "teller", + "ticktick", + "timely", + "todoist", + "toggl", + "tremendous", + "tsheetsteam", + "tumblr", + "twenty", + "twinfield", + "twitch", + "twitter", + "typeform", + "uber", + "venmo", + "vimeo", + "wakatime", + "wealthbox", + "webflow", + "whoop", + "wise", + "wordpress", + "wrike", + "xero", + "yahoo", + "yandex", + "yodlee", + "zapier", + "zendesk", + "zenefits", + "zoho", + "zoho-desk", + "zoom", + ], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> PreConfigureConnectorResponse: + """ + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return await self.post( + "/v2/connector-config/pre-configure", + body=await async_maybe_transform( + {"connector_name": connector_name}, + client_pre_configure_connector_params.ClientPreConfigureConnectorParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=PreConfigureConnectorResponse, + ) + + async def pre_connect( + self, + *, + connector_config_id: str, + discriminated_data: client_pre_connect_params.DiscriminatedData, + options: client_pre_connect_params.Options, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> PreConnectResponse: + """Args: + connector_config_id: Must correspond to data.connector_name. + + Technically id should imply + connector_name already but there is no way to specify a discriminated union with + id alone. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return cast( + PreConnectResponse, + await self.post( + "/v1/connect/pre-connect", + body=await async_maybe_transform( + { + "connector_config_id": connector_config_id, + "discriminated_data": discriminated_data, + "options": options, + }, + client_pre_connect_params.ClientPreConnectParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=cast( + Any, PreConnectResponse + ), # Union types cannot be passed in as arguments in the type system + ), + ) + async def upsert_connnector_config( self, id: str, @@ -3411,6 +4022,9 @@ def __init__(self, client: Openint) -> None: self.check_connection = to_raw_response_wrapper( client.check_connection, ) + self.connector_rpc = to_raw_response_wrapper( + client.connector_rpc, + ) self.create_connection = to_raw_response_wrapper( client.create_connection, ) @@ -3441,12 +4055,12 @@ def __init__(self, client: Openint) -> None: self.list_assignments = to_raw_response_wrapper( client.list_assignments, ) - self.list_connection_configs = to_raw_response_wrapper( - client.list_connection_configs, - ) self.list_connections = to_raw_response_wrapper( client.list_connections, ) + self.list_connector_configs = to_raw_response_wrapper( + client.list_connector_configs, + ) self.list_connectors = to_raw_response_wrapper( client.list_connectors, ) @@ -3459,6 +4073,12 @@ def __init__(self, client: Openint) -> None: self.list_events = to_raw_response_wrapper( client.list_events, ) + self.pre_configure_connector = to_raw_response_wrapper( + client.pre_configure_connector, + ) + self.pre_connect = to_raw_response_wrapper( + client.pre_connect, + ) self.upsert_connnector_config = to_raw_response_wrapper( client.upsert_connnector_config, ) @@ -3478,6 +4098,9 @@ def __init__(self, client: AsyncOpenint) -> None: self.check_connection = async_to_raw_response_wrapper( client.check_connection, ) + self.connector_rpc = async_to_raw_response_wrapper( + client.connector_rpc, + ) self.create_connection = async_to_raw_response_wrapper( client.create_connection, ) @@ -3508,12 +4131,12 @@ def __init__(self, client: AsyncOpenint) -> None: self.list_assignments = async_to_raw_response_wrapper( client.list_assignments, ) - self.list_connection_configs = async_to_raw_response_wrapper( - client.list_connection_configs, - ) self.list_connections = async_to_raw_response_wrapper( client.list_connections, ) + self.list_connector_configs = async_to_raw_response_wrapper( + client.list_connector_configs, + ) self.list_connectors = async_to_raw_response_wrapper( client.list_connectors, ) @@ -3526,6 +4149,12 @@ def __init__(self, client: AsyncOpenint) -> None: self.list_events = async_to_raw_response_wrapper( client.list_events, ) + self.pre_configure_connector = async_to_raw_response_wrapper( + client.pre_configure_connector, + ) + self.pre_connect = async_to_raw_response_wrapper( + client.pre_connect, + ) self.upsert_connnector_config = async_to_raw_response_wrapper( client.upsert_connnector_config, ) @@ -3545,6 +4174,9 @@ def __init__(self, client: Openint) -> None: self.check_connection = to_streamed_response_wrapper( client.check_connection, ) + self.connector_rpc = to_streamed_response_wrapper( + client.connector_rpc, + ) self.create_connection = to_streamed_response_wrapper( client.create_connection, ) @@ -3575,12 +4207,12 @@ def __init__(self, client: Openint) -> None: self.list_assignments = to_streamed_response_wrapper( client.list_assignments, ) - self.list_connection_configs = to_streamed_response_wrapper( - client.list_connection_configs, - ) self.list_connections = to_streamed_response_wrapper( client.list_connections, ) + self.list_connector_configs = to_streamed_response_wrapper( + client.list_connector_configs, + ) self.list_connectors = to_streamed_response_wrapper( client.list_connectors, ) @@ -3593,6 +4225,12 @@ def __init__(self, client: Openint) -> None: self.list_events = to_streamed_response_wrapper( client.list_events, ) + self.pre_configure_connector = to_streamed_response_wrapper( + client.pre_configure_connector, + ) + self.pre_connect = to_streamed_response_wrapper( + client.pre_connect, + ) self.upsert_connnector_config = to_streamed_response_wrapper( client.upsert_connnector_config, ) @@ -3612,6 +4250,9 @@ def __init__(self, client: AsyncOpenint) -> None: self.check_connection = async_to_streamed_response_wrapper( client.check_connection, ) + self.connector_rpc = async_to_streamed_response_wrapper( + client.connector_rpc, + ) self.create_connection = async_to_streamed_response_wrapper( client.create_connection, ) @@ -3642,12 +4283,12 @@ def __init__(self, client: AsyncOpenint) -> None: self.list_assignments = async_to_streamed_response_wrapper( client.list_assignments, ) - self.list_connection_configs = async_to_streamed_response_wrapper( - client.list_connection_configs, - ) self.list_connections = async_to_streamed_response_wrapper( client.list_connections, ) + self.list_connector_configs = async_to_streamed_response_wrapper( + client.list_connector_configs, + ) self.list_connectors = async_to_streamed_response_wrapper( client.list_connectors, ) @@ -3660,6 +4301,12 @@ def __init__(self, client: AsyncOpenint) -> None: self.list_events = async_to_streamed_response_wrapper( client.list_events, ) + self.pre_configure_connector = async_to_streamed_response_wrapper( + client.pre_configure_connector, + ) + self.pre_connect = async_to_streamed_response_wrapper( + client.pre_connect, + ) self.upsert_connnector_config = async_to_streamed_response_wrapper( client.upsert_connnector_config, ) diff --git a/src/openint/_compat.py b/src/openint/_compat.py index 92d9ee6..bdef67f 100644 --- a/src/openint/_compat.py +++ b/src/openint/_compat.py @@ -12,14 +12,13 @@ _T = TypeVar("_T") _ModelT = TypeVar("_ModelT", bound=pydantic.BaseModel) -# --------------- Pydantic v2 compatibility --------------- +# --------------- Pydantic v2, v3 compatibility --------------- # Pyright incorrectly reports some of our functions as overriding a method when they don't # pyright: reportIncompatibleMethodOverride=false -PYDANTIC_V2 = pydantic.VERSION.startswith("2.") +PYDANTIC_V1 = pydantic.VERSION.startswith("1.") -# v1 re-exports if TYPE_CHECKING: def parse_date(value: date | StrBytesIntFloat) -> date: # noqa: ARG001 @@ -44,90 +43,92 @@ def is_typeddict(type_: type[Any]) -> bool: # noqa: ARG001 ... else: - if PYDANTIC_V2: - from pydantic.v1.typing import ( + # v1 re-exports + if PYDANTIC_V1: + from pydantic.typing import ( get_args as get_args, is_union as is_union, get_origin as get_origin, is_typeddict as is_typeddict, is_literal_type as is_literal_type, ) - from pydantic.v1.datetime_parse import parse_date as parse_date, parse_datetime as parse_datetime + from pydantic.datetime_parse import parse_date as parse_date, parse_datetime as parse_datetime else: - from pydantic.typing import ( + from ._utils import ( get_args as get_args, is_union as is_union, get_origin as get_origin, + parse_date as parse_date, is_typeddict as is_typeddict, + parse_datetime as parse_datetime, is_literal_type as is_literal_type, ) - from pydantic.datetime_parse import parse_date as parse_date, parse_datetime as parse_datetime # refactored config if TYPE_CHECKING: from pydantic import ConfigDict as ConfigDict else: - if PYDANTIC_V2: - from pydantic import ConfigDict - else: + if PYDANTIC_V1: # TODO: provide an error message here? ConfigDict = None + else: + from pydantic import ConfigDict as ConfigDict # renamed methods / properties def parse_obj(model: type[_ModelT], value: object) -> _ModelT: - if PYDANTIC_V2: - return model.model_validate(value) - else: + if PYDANTIC_V1: return cast(_ModelT, model.parse_obj(value)) # pyright: ignore[reportDeprecated, reportUnnecessaryCast] + else: + return model.model_validate(value) def field_is_required(field: FieldInfo) -> bool: - if PYDANTIC_V2: - return field.is_required() - return field.required # type: ignore + if PYDANTIC_V1: + return field.required # type: ignore + return field.is_required() def field_get_default(field: FieldInfo) -> Any: value = field.get_default() - if PYDANTIC_V2: - from pydantic_core import PydanticUndefined - - if value == PydanticUndefined: - return None + if PYDANTIC_V1: return value + from pydantic_core import PydanticUndefined + + if value == PydanticUndefined: + return None return value def field_outer_type(field: FieldInfo) -> Any: - if PYDANTIC_V2: - return field.annotation - return field.outer_type_ # type: ignore + if PYDANTIC_V1: + return field.outer_type_ # type: ignore + return field.annotation def get_model_config(model: type[pydantic.BaseModel]) -> Any: - if PYDANTIC_V2: - return model.model_config - return model.__config__ # type: ignore + if PYDANTIC_V1: + return model.__config__ # type: ignore + return model.model_config def get_model_fields(model: type[pydantic.BaseModel]) -> dict[str, FieldInfo]: - if PYDANTIC_V2: - return model.model_fields - return model.__fields__ # type: ignore + if PYDANTIC_V1: + return model.__fields__ # type: ignore + return model.model_fields def model_copy(model: _ModelT, *, deep: bool = False) -> _ModelT: - if PYDANTIC_V2: - return model.model_copy(deep=deep) - return model.copy(deep=deep) # type: ignore + if PYDANTIC_V1: + return model.copy(deep=deep) # type: ignore + return model.model_copy(deep=deep) def model_json(model: pydantic.BaseModel, *, indent: int | None = None) -> str: - if PYDANTIC_V2: - return model.model_dump_json(indent=indent) - return model.json(indent=indent) # type: ignore + if PYDANTIC_V1: + return model.json(indent=indent) # type: ignore + return model.model_dump_json(indent=indent) def model_dump( @@ -139,14 +140,14 @@ def model_dump( warnings: bool = True, mode: Literal["json", "python"] = "python", ) -> dict[str, Any]: - if PYDANTIC_V2 or hasattr(model, "model_dump"): + if (not PYDANTIC_V1) or hasattr(model, "model_dump"): return model.model_dump( mode=mode, exclude=exclude, exclude_unset=exclude_unset, exclude_defaults=exclude_defaults, # warnings are not supported in Pydantic v1 - warnings=warnings if PYDANTIC_V2 else True, + warnings=True if PYDANTIC_V1 else warnings, ) return cast( "dict[str, Any]", @@ -159,9 +160,9 @@ def model_dump( def model_parse(model: type[_ModelT], data: Any) -> _ModelT: - if PYDANTIC_V2: - return model.model_validate(data) - return model.parse_obj(data) # pyright: ignore[reportDeprecated] + if PYDANTIC_V1: + return model.parse_obj(data) # pyright: ignore[reportDeprecated] + return model.model_validate(data) # generic models @@ -170,17 +171,16 @@ def model_parse(model: type[_ModelT], data: Any) -> _ModelT: class GenericModel(pydantic.BaseModel): ... else: - if PYDANTIC_V2: + if PYDANTIC_V1: + import pydantic.generics + + class GenericModel(pydantic.generics.GenericModel, pydantic.BaseModel): ... + else: # there no longer needs to be a distinction in v2 but # we still have to create our own subclass to avoid # inconsistent MRO ordering errors class GenericModel(pydantic.BaseModel): ... - else: - import pydantic.generics - - class GenericModel(pydantic.generics.GenericModel, pydantic.BaseModel): ... - # cached properties if TYPE_CHECKING: diff --git a/src/openint/_models.py b/src/openint/_models.py index b8387ce..3a6017e 100644 --- a/src/openint/_models.py +++ b/src/openint/_models.py @@ -50,7 +50,7 @@ strip_annotated_type, ) from ._compat import ( - PYDANTIC_V2, + PYDANTIC_V1, ConfigDict, GenericModel as BaseGenericModel, get_args, @@ -81,11 +81,7 @@ class _ConfigProtocol(Protocol): class BaseModel(pydantic.BaseModel): - if PYDANTIC_V2: - model_config: ClassVar[ConfigDict] = ConfigDict( - extra="allow", defer_build=coerce_boolean(os.environ.get("DEFER_PYDANTIC_BUILD", "true")) - ) - else: + if PYDANTIC_V1: @property @override @@ -95,6 +91,10 @@ def model_fields_set(self) -> set[str]: class Config(pydantic.BaseConfig): # pyright: ignore[reportDeprecated] extra: Any = pydantic.Extra.allow # type: ignore + else: + model_config: ClassVar[ConfigDict] = ConfigDict( + extra="allow", defer_build=coerce_boolean(os.environ.get("DEFER_PYDANTIC_BUILD", "true")) + ) def to_dict( self, @@ -215,25 +215,25 @@ def construct( # pyright: ignore[reportIncompatibleMethodOverride] if key not in model_fields: parsed = construct_type(value=value, type_=extra_field_type) if extra_field_type is not None else value - if PYDANTIC_V2: - _extra[key] = parsed - else: + if PYDANTIC_V1: _fields_set.add(key) fields_values[key] = parsed + else: + _extra[key] = parsed object.__setattr__(m, "__dict__", fields_values) - if PYDANTIC_V2: - # these properties are copied from Pydantic's `model_construct()` method - object.__setattr__(m, "__pydantic_private__", None) - object.__setattr__(m, "__pydantic_extra__", _extra) - object.__setattr__(m, "__pydantic_fields_set__", _fields_set) - else: + if PYDANTIC_V1: # init_private_attributes() does not exist in v2 m._init_private_attributes() # type: ignore # copied from Pydantic v1's `construct()` method object.__setattr__(m, "__fields_set__", _fields_set) + else: + # these properties are copied from Pydantic's `model_construct()` method + object.__setattr__(m, "__pydantic_private__", None) + object.__setattr__(m, "__pydantic_extra__", _extra) + object.__setattr__(m, "__pydantic_fields_set__", _fields_set) return m @@ -243,7 +243,7 @@ def construct( # pyright: ignore[reportIncompatibleMethodOverride] # although not in practice model_construct = construct - if not PYDANTIC_V2: + if PYDANTIC_V1: # we define aliases for some of the new pydantic v2 methods so # that we can just document these methods without having to specify # a specific pydantic version as some users may not know which @@ -304,7 +304,7 @@ def model_dump( exclude_none=exclude_none, ) - return cast(dict[str, Any], json_safe(dumped)) if mode == "json" else dumped + return cast("dict[str, Any]", json_safe(dumped)) if mode == "json" else dumped @override def model_dump_json( @@ -363,10 +363,10 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object: if value is None: return field_get_default(field) - if PYDANTIC_V2: - type_ = field.annotation - else: + if PYDANTIC_V1: type_ = cast(type, field.outer_type_) # type: ignore + else: + type_ = field.annotation # type: ignore if type_ is None: raise RuntimeError(f"Unexpected field type is None for {key}") @@ -375,7 +375,7 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object: def _get_extra_fields_type(cls: type[pydantic.BaseModel]) -> type | None: - if not PYDANTIC_V2: + if PYDANTIC_V1: # TODO return None @@ -628,30 +628,30 @@ def _build_discriminated_union_meta(*, union: type, meta_annotations: tuple[Any, for variant in get_args(union): variant = strip_annotated_type(variant) if is_basemodel_type(variant): - if PYDANTIC_V2: - field = _extract_field_schema_pv2(variant, discriminator_field_name) - if not field: + if PYDANTIC_V1: + field_info = cast("dict[str, FieldInfo]", variant.__fields__).get(discriminator_field_name) # pyright: ignore[reportDeprecated, reportUnnecessaryCast] + if not field_info: continue # Note: if one variant defines an alias then they all should - discriminator_alias = field.get("serialization_alias") - - field_schema = field["schema"] + discriminator_alias = field_info.alias - if field_schema["type"] == "literal": - for entry in cast("LiteralSchema", field_schema)["expected"]: + if (annotation := getattr(field_info, "annotation", None)) and is_literal_type(annotation): + for entry in get_args(annotation): if isinstance(entry, str): mapping[entry] = variant else: - field_info = cast("dict[str, FieldInfo]", variant.__fields__).get(discriminator_field_name) # pyright: ignore[reportDeprecated, reportUnnecessaryCast] - if not field_info: + field = _extract_field_schema_pv2(variant, discriminator_field_name) + if not field: continue # Note: if one variant defines an alias then they all should - discriminator_alias = field_info.alias + discriminator_alias = field.get("serialization_alias") - if (annotation := getattr(field_info, "annotation", None)) and is_literal_type(annotation): - for entry in get_args(annotation): + field_schema = field["schema"] + + if field_schema["type"] == "literal": + for entry in cast("LiteralSchema", field_schema)["expected"]: if isinstance(entry, str): mapping[entry] = variant @@ -714,7 +714,7 @@ class GenericModel(BaseGenericModel, BaseModel): pass -if PYDANTIC_V2: +if not PYDANTIC_V1: from pydantic import TypeAdapter as _TypeAdapter _CachedTypeAdapter = cast("TypeAdapter[object]", lru_cache(maxsize=None)(_TypeAdapter)) @@ -782,12 +782,12 @@ class FinalRequestOptions(pydantic.BaseModel): json_data: Union[Body, None] = None extra_json: Union[AnyMapping, None] = None - if PYDANTIC_V2: - model_config: ClassVar[ConfigDict] = ConfigDict(arbitrary_types_allowed=True) - else: + if PYDANTIC_V1: class Config(pydantic.BaseConfig): # pyright: ignore[reportDeprecated] arbitrary_types_allowed: bool = True + else: + model_config: ClassVar[ConfigDict] = ConfigDict(arbitrary_types_allowed=True) def get_max_retries(self, max_retries: int) -> int: if isinstance(self.max_retries, NotGiven): @@ -820,9 +820,9 @@ def construct( # type: ignore key: strip_not_given(value) for key, value in values.items() } - if PYDANTIC_V2: - return super().model_construct(_fields_set, **kwargs) - return cast(FinalRequestOptions, super().construct(_fields_set, **kwargs)) # pyright: ignore[reportDeprecated] + if PYDANTIC_V1: + return cast(FinalRequestOptions, super().construct(_fields_set, **kwargs)) # pyright: ignore[reportDeprecated] + return super().model_construct(_fields_set, **kwargs) if not TYPE_CHECKING: # type checkers incorrectly complain about this assignment diff --git a/src/openint/_types.py b/src/openint/_types.py index d59c1d1..3d0ab4b 100644 --- a/src/openint/_types.py +++ b/src/openint/_types.py @@ -13,10 +13,21 @@ Mapping, TypeVar, Callable, + Iterator, Optional, Sequence, ) -from typing_extensions import Set, Literal, Protocol, TypeAlias, TypedDict, override, runtime_checkable +from typing_extensions import ( + Set, + Literal, + Protocol, + TypeAlias, + TypedDict, + SupportsIndex, + overload, + override, + runtime_checkable, +) import httpx import pydantic @@ -217,3 +228,26 @@ class _GenericAlias(Protocol): class HttpxSendArgs(TypedDict, total=False): auth: httpx.Auth follow_redirects: bool + + +_T_co = TypeVar("_T_co", covariant=True) + + +if TYPE_CHECKING: + # This works because str.__contains__ does not accept object (either in typeshed or at runtime) + # https://github.com/hauntsaninja/useful_types/blob/5e9710f3875107d068e7679fd7fec9cfab0eff3b/useful_types/__init__.py#L285 + class SequenceNotStr(Protocol[_T_co]): + @overload + def __getitem__(self, index: SupportsIndex, /) -> _T_co: ... + @overload + def __getitem__(self, index: slice, /) -> Sequence[_T_co]: ... + def __contains__(self, value: object, /) -> bool: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T_co]: ... + def index(self, value: Any, start: int = 0, stop: int = ..., /) -> int: ... + def count(self, value: Any, /) -> int: ... + def __reversed__(self) -> Iterator[_T_co]: ... +else: + # just point this to a normal `Sequence` at runtime to avoid having to special case + # deserializing our custom sequence type + SequenceNotStr = Sequence diff --git a/src/openint/_utils/__init__.py b/src/openint/_utils/__init__.py index d4fda26..dc64e29 100644 --- a/src/openint/_utils/__init__.py +++ b/src/openint/_utils/__init__.py @@ -10,7 +10,6 @@ lru_cache as lru_cache, is_mapping as is_mapping, is_tuple_t as is_tuple_t, - parse_date as parse_date, is_iterable as is_iterable, is_sequence as is_sequence, coerce_float as coerce_float, @@ -23,7 +22,6 @@ coerce_boolean as coerce_boolean, coerce_integer as coerce_integer, file_from_path as file_from_path, - parse_datetime as parse_datetime, strip_not_given as strip_not_given, deepcopy_minimal as deepcopy_minimal, get_async_library as get_async_library, @@ -32,12 +30,20 @@ maybe_coerce_boolean as maybe_coerce_boolean, maybe_coerce_integer as maybe_coerce_integer, ) +from ._compat import ( + get_args as get_args, + is_union as is_union, + get_origin as get_origin, + is_typeddict as is_typeddict, + is_literal_type as is_literal_type, +) from ._typing import ( is_list_type as is_list_type, is_union_type as is_union_type, extract_type_arg as extract_type_arg, is_iterable_type as is_iterable_type, is_required_type as is_required_type, + is_sequence_type as is_sequence_type, is_annotated_type as is_annotated_type, is_type_alias_type as is_type_alias_type, strip_annotated_type as strip_annotated_type, @@ -55,3 +61,4 @@ function_has_argument as function_has_argument, assert_signatures_in_sync as assert_signatures_in_sync, ) +from ._datetime_parse import parse_date as parse_date, parse_datetime as parse_datetime diff --git a/src/openint/_utils/_compat.py b/src/openint/_utils/_compat.py new file mode 100644 index 0000000..dd70323 --- /dev/null +++ b/src/openint/_utils/_compat.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +import sys +import typing_extensions +from typing import Any, Type, Union, Literal, Optional +from datetime import date, datetime +from typing_extensions import get_args as _get_args, get_origin as _get_origin + +from .._types import StrBytesIntFloat +from ._datetime_parse import parse_date as _parse_date, parse_datetime as _parse_datetime + +_LITERAL_TYPES = {Literal, typing_extensions.Literal} + + +def get_args(tp: type[Any]) -> tuple[Any, ...]: + return _get_args(tp) + + +def get_origin(tp: type[Any]) -> type[Any] | None: + return _get_origin(tp) + + +def is_union(tp: Optional[Type[Any]]) -> bool: + if sys.version_info < (3, 10): + return tp is Union # type: ignore[comparison-overlap] + else: + import types + + return tp is Union or tp is types.UnionType + + +def is_typeddict(tp: Type[Any]) -> bool: + return typing_extensions.is_typeddict(tp) + + +def is_literal_type(tp: Type[Any]) -> bool: + return get_origin(tp) in _LITERAL_TYPES + + +def parse_date(value: Union[date, StrBytesIntFloat]) -> date: + return _parse_date(value) + + +def parse_datetime(value: Union[datetime, StrBytesIntFloat]) -> datetime: + return _parse_datetime(value) diff --git a/src/openint/_utils/_datetime_parse.py b/src/openint/_utils/_datetime_parse.py new file mode 100644 index 0000000..7cb9d9e --- /dev/null +++ b/src/openint/_utils/_datetime_parse.py @@ -0,0 +1,136 @@ +""" +This file contains code from https://github.com/pydantic/pydantic/blob/main/pydantic/v1/datetime_parse.py +without the Pydantic v1 specific errors. +""" + +from __future__ import annotations + +import re +from typing import Dict, Union, Optional +from datetime import date, datetime, timezone, timedelta + +from .._types import StrBytesIntFloat + +date_expr = r"(?P\d{4})-(?P\d{1,2})-(?P\d{1,2})" +time_expr = ( + r"(?P\d{1,2}):(?P\d{1,2})" + r"(?::(?P\d{1,2})(?:\.(?P\d{1,6})\d{0,6})?)?" + r"(?PZ|[+-]\d{2}(?::?\d{2})?)?$" +) + +date_re = re.compile(f"{date_expr}$") +datetime_re = re.compile(f"{date_expr}[T ]{time_expr}") + + +EPOCH = datetime(1970, 1, 1) +# if greater than this, the number is in ms, if less than or equal it's in seconds +# (in seconds this is 11th October 2603, in ms it's 20th August 1970) +MS_WATERSHED = int(2e10) +# slightly more than datetime.max in ns - (datetime.max - EPOCH).total_seconds() * 1e9 +MAX_NUMBER = int(3e20) + + +def _get_numeric(value: StrBytesIntFloat, native_expected_type: str) -> Union[None, int, float]: + if isinstance(value, (int, float)): + return value + try: + return float(value) + except ValueError: + return None + except TypeError: + raise TypeError(f"invalid type; expected {native_expected_type}, string, bytes, int or float") from None + + +def _from_unix_seconds(seconds: Union[int, float]) -> datetime: + if seconds > MAX_NUMBER: + return datetime.max + elif seconds < -MAX_NUMBER: + return datetime.min + + while abs(seconds) > MS_WATERSHED: + seconds /= 1000 + dt = EPOCH + timedelta(seconds=seconds) + return dt.replace(tzinfo=timezone.utc) + + +def _parse_timezone(value: Optional[str]) -> Union[None, int, timezone]: + if value == "Z": + return timezone.utc + elif value is not None: + offset_mins = int(value[-2:]) if len(value) > 3 else 0 + offset = 60 * int(value[1:3]) + offset_mins + if value[0] == "-": + offset = -offset + return timezone(timedelta(minutes=offset)) + else: + return None + + +def parse_datetime(value: Union[datetime, StrBytesIntFloat]) -> datetime: + """ + Parse a datetime/int/float/string and return a datetime.datetime. + + This function supports time zone offsets. When the input contains one, + the output uses a timezone with a fixed offset from UTC. + + Raise ValueError if the input is well formatted but not a valid datetime. + Raise ValueError if the input isn't well formatted. + """ + if isinstance(value, datetime): + return value + + number = _get_numeric(value, "datetime") + if number is not None: + return _from_unix_seconds(number) + + if isinstance(value, bytes): + value = value.decode() + + assert not isinstance(value, (float, int)) + + match = datetime_re.match(value) + if match is None: + raise ValueError("invalid datetime format") + + kw = match.groupdict() + if kw["microsecond"]: + kw["microsecond"] = kw["microsecond"].ljust(6, "0") + + tzinfo = _parse_timezone(kw.pop("tzinfo")) + kw_: Dict[str, Union[None, int, timezone]] = {k: int(v) for k, v in kw.items() if v is not None} + kw_["tzinfo"] = tzinfo + + return datetime(**kw_) # type: ignore + + +def parse_date(value: Union[date, StrBytesIntFloat]) -> date: + """ + Parse a date/int/float/string and return a datetime.date. + + Raise ValueError if the input is well formatted but not a valid date. + Raise ValueError if the input isn't well formatted. + """ + if isinstance(value, date): + if isinstance(value, datetime): + return value.date() + else: + return value + + number = _get_numeric(value, "date") + if number is not None: + return _from_unix_seconds(number).date() + + if isinstance(value, bytes): + value = value.decode() + + assert not isinstance(value, (float, int)) + match = date_re.match(value) + if match is None: + raise ValueError("invalid date format") + + kw = {k: int(v) for k, v in match.groupdict().items()} + + try: + return date(**kw) + except ValueError: + raise ValueError("invalid date format") from None diff --git a/src/openint/_utils/_transform.py b/src/openint/_utils/_transform.py index b0cc20a..c19124f 100644 --- a/src/openint/_utils/_transform.py +++ b/src/openint/_utils/_transform.py @@ -16,18 +16,20 @@ lru_cache, is_mapping, is_iterable, + is_sequence, ) from .._files import is_base64_file_input +from ._compat import get_origin, is_typeddict from ._typing import ( is_list_type, is_union_type, extract_type_arg, is_iterable_type, is_required_type, + is_sequence_type, is_annotated_type, strip_annotated_type, ) -from .._compat import get_origin, model_dump, is_typeddict _T = TypeVar("_T") @@ -167,6 +169,8 @@ def _transform_recursive( Defaults to the same value as the `annotation` argument. """ + from .._compat import model_dump + if inner_type is None: inner_type = annotation @@ -184,6 +188,8 @@ def _transform_recursive( (is_list_type(stripped_type) and is_list(data)) # Iterable[T] or (is_iterable_type(stripped_type) and is_iterable(data) and not isinstance(data, str)) + # Sequence[T] + or (is_sequence_type(stripped_type) and is_sequence(data) and not isinstance(data, str)) ): # dicts are technically iterable, but it is an iterable on the keys of the dict and is not usually # intended as an iterable, so we don't transform it. @@ -329,6 +335,8 @@ async def _async_transform_recursive( Defaults to the same value as the `annotation` argument. """ + from .._compat import model_dump + if inner_type is None: inner_type = annotation @@ -346,6 +354,8 @@ async def _async_transform_recursive( (is_list_type(stripped_type) and is_list(data)) # Iterable[T] or (is_iterable_type(stripped_type) and is_iterable(data) and not isinstance(data, str)) + # Sequence[T] + or (is_sequence_type(stripped_type) and is_sequence(data) and not isinstance(data, str)) ): # dicts are technically iterable, but it is an iterable on the keys of the dict and is not usually # intended as an iterable, so we don't transform it. diff --git a/src/openint/_utils/_typing.py b/src/openint/_utils/_typing.py index 1bac954..193109f 100644 --- a/src/openint/_utils/_typing.py +++ b/src/openint/_utils/_typing.py @@ -15,7 +15,7 @@ from ._utils import lru_cache from .._types import InheritsGeneric -from .._compat import is_union as _is_union +from ._compat import is_union as _is_union def is_annotated_type(typ: type) -> bool: @@ -26,6 +26,11 @@ def is_list_type(typ: type) -> bool: return (get_origin(typ) or typ) == list +def is_sequence_type(typ: type) -> bool: + origin = get_origin(typ) or typ + return origin == typing_extensions.Sequence or origin == typing.Sequence or origin == _c_abc.Sequence + + def is_iterable_type(typ: type) -> bool: """If the given type is `typing.Iterable[T]`""" origin = get_origin(typ) or typ diff --git a/src/openint/_utils/_utils.py b/src/openint/_utils/_utils.py index ea3cf3f..f081859 100644 --- a/src/openint/_utils/_utils.py +++ b/src/openint/_utils/_utils.py @@ -22,7 +22,6 @@ import sniffio from .._types import NotGiven, FileTypes, NotGivenOr, HeadersLike -from .._compat import parse_date as parse_date, parse_datetime as parse_datetime _T = TypeVar("_T") _TupleT = TypeVar("_TupleT", bound=Tuple[object, ...]) diff --git a/src/openint/_version.py b/src/openint/_version.py index 4ed8fb6..13cb095 100644 --- a/src/openint/_version.py +++ b/src/openint/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "openint" -__version__ = "2.9.0" # x-release-please-version +__version__ = "2.10.0" # x-release-please-version diff --git a/src/openint/types/__init__.py b/src/openint/types/__init__.py index e3a3efc..10002b2 100644 --- a/src/openint/types/__init__.py +++ b/src/openint/types/__init__.py @@ -5,13 +5,16 @@ from .connector import Connector as Connector from .integration import Integration as Integration from .list_events_response import ListEventsResponse as ListEventsResponse +from .pre_connect_response import PreConnectResponse as PreConnectResponse from .create_token_response import CreateTokenResponse as CreateTokenResponse +from .connector_rpc_response import ConnectorRpcResponse as ConnectorRpcResponse from .get_connection_response import GetConnectionResponse as GetConnectionResponse from .list_customers_response import ListCustomersResponse as ListCustomersResponse from .list_connectors_response import ListConnectorsResponse as ListConnectorsResponse from .upsert_customer_response import UpsertCustomerResponse as UpsertCustomerResponse from .check_connection_response import CheckConnectionResponse as CheckConnectionResponse from .client_list_events_params import ClientListEventsParams as ClientListEventsParams +from .client_pre_connect_params import ClientPreConnectParams as ClientPreConnectParams from .get_current_user_response import GetCurrentUserResponse as GetCurrentUserResponse from .list_assignments_response import ListAssignmentsResponse as ListAssignmentsResponse from .list_connections_response import ListConnectionsResponse as ListConnectionsResponse @@ -20,6 +23,7 @@ from .create_connection_response import CreateConnectionResponse as CreateConnectionResponse from .delete_assignment_response import DeleteAssignmentResponse as DeleteAssignmentResponse from .delete_connection_response import DeleteConnectionResponse as DeleteConnectionResponse +from .client_connector_rpc_params import ClientConnectorRpcParams as ClientConnectorRpcParams from .client_get_connection_params import ClientGetConnectionParams as ClientGetConnectionParams from .client_list_customers_params import ClientListCustomersParams as ClientListCustomersParams from .get_conector_config_response import GetConectorConfigResponse as GetConectorConfigResponse @@ -28,18 +32,20 @@ from .client_upsert_customer_params import ClientUpsertCustomerParams as ClientUpsertCustomerParams from .client_list_connections_params import ClientListConnectionsParams as ClientListConnectionsParams from .client_create_connection_params import ClientCreateConnectionParams as ClientCreateConnectionParams +from .list_connector_configs_response import ListConnectorConfigsResponse as ListConnectorConfigsResponse from .delete_connector_config_response import DeleteConnectorConfigResponse as DeleteConnectorConfigResponse -from .list_connection_configs_response import ListConnectionConfigsResponse as ListConnectionConfigsResponse from .list_connnector_configs_response import ListConnnectorConfigsResponse as ListConnnectorConfigsResponse +from .pre_configure_connector_response import PreConfigureConnectorResponse as PreConfigureConnectorResponse from .client_get_conector_config_params import ClientGetConectorConfigParams as ClientGetConectorConfigParams from .create_connnector_config_response import CreateConnnectorConfigResponse as CreateConnnectorConfigResponse from .upsert_connnector_config_response import UpsertConnnectorConfigResponse as UpsertConnnectorConfigResponse -from .client_list_connection_configs_params import ( - ClientListConnectionConfigsParams as ClientListConnectionConfigsParams, -) +from .client_list_connector_configs_params import ClientListConnectorConfigsParams as ClientListConnectorConfigsParams from .client_list_connnector_configs_params import ( ClientListConnnectorConfigsParams as ClientListConnnectorConfigsParams, ) +from .client_pre_configure_connector_params import ( + ClientPreConfigureConnectorParams as ClientPreConfigureConnectorParams, +) from .client_create_connnector_config_params import ( ClientCreateConnnectorConfigParams as ClientCreateConnnectorConfigParams, ) diff --git a/src/openint/types/client_connector_rpc_params.py b/src/openint/types/client_connector_rpc_params.py new file mode 100644 index 0000000..1d49a61 --- /dev/null +++ b/src/openint/types/client_connector_rpc_params.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Dict +from typing_extensions import Required, TypedDict + +__all__ = ["ClientConnectorRpcParams"] + + +class ClientConnectorRpcParams(TypedDict, total=False): + connector_config_id: Required[str] + """The id of the connector config, starts with `ccfg_`""" + + input: Required[Dict[str, object]] diff --git a/src/openint/types/client_create_connection_params.py b/src/openint/types/client_create_connection_params.py index 07b59fe..50c6bf9 100644 --- a/src/openint/types/client_create_connection_params.py +++ b/src/openint/types/client_create_connection_params.py @@ -624,6 +624,8 @@ "DataConnectorSaltedgeDiscriminatedConnectionSettings", "DataConnectorSharepointOnpremDiscriminatedConnectionSettings", "DataConnectorSharepointOnpremDiscriminatedConnectionSettingsSettings", + "DataConnectorSlackAgentDiscriminatedConnectionSettings", + "DataConnectorSlackAgentDiscriminatedConnectionSettingsSettings", "DataConnectorSplitwiseDiscriminatedConnectionSettings", "DataConnectorSplitwiseDiscriminatedConnectionSettingsSettings", "DataConnectorSplitwiseDiscriminatedConnectionSettingsSettingsCurrentUser", @@ -7961,6 +7963,17 @@ class DataConnectorSharepointOnpremDiscriminatedConnectionSettings(TypedDict, to settings: DataConnectorSharepointOnpremDiscriminatedConnectionSettingsSettings +class DataConnectorSlackAgentDiscriminatedConnectionSettingsSettings(TypedDict, total=False): + bot_access_token: Required[str] + """Bot OAuth token - xoxb-...""" + + +class DataConnectorSlackAgentDiscriminatedConnectionSettings(TypedDict, total=False): + connector_name: Required[Literal["slack-agent"]] + + settings: DataConnectorSlackAgentDiscriminatedConnectionSettingsSettings + + class DataConnectorSplitwiseDiscriminatedConnectionSettingsSettingsCurrentUserNotifications(TypedDict, total=False): added_as_friend: Required[bool] @@ -8328,6 +8341,7 @@ class DataConnectorYodleeDiscriminatedConnectionSettings(TypedDict, total=False) DataConnectorRampDiscriminatedConnectionSettings, DataConnectorSaltedgeDiscriminatedConnectionSettings, DataConnectorSharepointOnpremDiscriminatedConnectionSettings, + DataConnectorSlackAgentDiscriminatedConnectionSettings, DataConnectorSplitwiseDiscriminatedConnectionSettings, DataConnectorStripeDiscriminatedConnectionSettings, DataConnectorTellerDiscriminatedConnectionSettings, diff --git a/src/openint/types/client_create_token_params.py b/src/openint/types/client_create_token_params.py index 73543ab..7894246 100644 --- a/src/openint/types/client_create_token_params.py +++ b/src/openint/types/client_create_token_params.py @@ -150,6 +150,7 @@ class ConnectOptions(TypedDict, total=False): "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", diff --git a/src/openint/types/client_list_connections_params.py b/src/openint/types/client_list_connections_params.py index c64cfa2..be682cf 100644 --- a/src/openint/types/client_list_connections_params.py +++ b/src/openint/types/client_list_connections_params.py @@ -5,11 +5,13 @@ from typing import List from typing_extensions import Literal, TypedDict +from .._types import SequenceNotStr + __all__ = ["ClientListConnectionsParams"] class ClientListConnectionsParams(TypedDict, total=False): - connection_ids: List[str] + connection_ids: SequenceNotStr[str] connector_config_id: str """The id of the connector config, starts with `ccfg_`""" @@ -144,6 +146,7 @@ class ClientListConnectionsParams(TypedDict, total=False): "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", diff --git a/src/openint/types/client_list_connection_configs_params.py b/src/openint/types/client_list_connector_configs_params.py similarity index 97% rename from src/openint/types/client_list_connection_configs_params.py rename to src/openint/types/client_list_connector_configs_params.py index 8d59f50..f47f0d9 100644 --- a/src/openint/types/client_list_connection_configs_params.py +++ b/src/openint/types/client_list_connector_configs_params.py @@ -5,10 +5,10 @@ from typing import List, Optional from typing_extensions import Literal, TypedDict -__all__ = ["ClientListConnectionConfigsParams"] +__all__ = ["ClientListConnectorConfigsParams"] -class ClientListConnectionConfigsParams(TypedDict, total=False): +class ClientListConnectorConfigsParams(TypedDict, total=False): connector_names: List[ Literal[ "accelo", @@ -139,6 +139,7 @@ class ClientListConnectionConfigsParams(TypedDict, total=False): "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", diff --git a/src/openint/types/client_list_connnector_configs_params.py b/src/openint/types/client_list_connnector_configs_params.py index ae75f08..01265b8 100644 --- a/src/openint/types/client_list_connnector_configs_params.py +++ b/src/openint/types/client_list_connnector_configs_params.py @@ -139,6 +139,7 @@ class ClientListConnnectorConfigsParams(TypedDict, total=False): "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", diff --git a/src/openint/types/client_pre_configure_connector_params.py b/src/openint/types/client_pre_configure_connector_params.py new file mode 100644 index 0000000..900b1f8 --- /dev/null +++ b/src/openint/types/client_pre_configure_connector_params.py @@ -0,0 +1,186 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ClientPreConfigureConnectorParams"] + + +class ClientPreConfigureConnectorParams(TypedDict, total=False): + connector_name: Required[ + Literal[ + "accelo", + "acme-apikey", + "acme-oauth2", + "adobe", + "adyen", + "aircall", + "airtable", + "amazon", + "apaleo", + "apollo", + "asana", + "attio", + "auth0", + "autodesk", + "aws", + "bamboohr", + "basecamp", + "battlenet", + "bigcommerce", + "bitbucket", + "bitly", + "blackbaud", + "boldsign", + "box", + "braintree", + "brex", + "calendly", + "clickup", + "close", + "coda", + "confluence", + "contentful", + "contentstack", + "copper", + "coros", + "datev", + "deel", + "dialpad", + "digitalocean", + "discord", + "docusign", + "dropbox", + "ebay", + "egnyte", + "envoy", + "eventbrite", + "exist", + "facebook", + "factorial", + "figma", + "finch", + "firebase", + "fitbit", + "foreceipt", + "fortnox", + "freshbooks", + "front", + "github", + "gitlab", + "gong", + "google-calendar", + "google-docs", + "google-drive", + "google-mail", + "google-sheet", + "gorgias", + "grain", + "greenhouse", + "gumroad", + "gusto", + "harvest", + "heron", + "highlevel", + "hubspot", + "instagram", + "intercom", + "jira", + "keap", + "lever", + "linear", + "linkedin", + "linkhut", + "lunchmoney", + "mailchimp", + "mercury", + "merge", + "miro", + "monday", + "moota", + "mural", + "namely", + "nationbuilder", + "netsuite", + "notion", + "odoo", + "okta", + "onebrick", + "openledger", + "osu", + "oura", + "outreach", + "pagerduty", + "pandadoc", + "payfit", + "paypal", + "pennylane", + "pinterest", + "pipedrive", + "plaid", + "podium", + "postgres", + "productboard", + "qualtrics", + "quickbooks", + "ramp", + "reddit", + "sage", + "salesforce", + "salesloft", + "saltedge", + "segment", + "servicem8", + "servicenow", + "sharepoint", + "sharepoint-onprem", + "shopify", + "signnow", + "slack", + "slack-agent", + "smartsheet", + "snowflake", + "splitwise", + "spotify", + "squarespace", + "squareup", + "stackexchange", + "strava", + "stripe", + "teamwork", + "teller", + "ticktick", + "timely", + "todoist", + "toggl", + "tremendous", + "tsheetsteam", + "tumblr", + "twenty", + "twinfield", + "twitch", + "twitter", + "typeform", + "uber", + "venmo", + "vimeo", + "wakatime", + "wealthbox", + "webflow", + "whoop", + "wise", + "wordpress", + "wrike", + "xero", + "yahoo", + "yandex", + "yodlee", + "zapier", + "zendesk", + "zenefits", + "zoho", + "zoho-desk", + "zoom", + ] + ] diff --git a/src/openint/types/client_pre_connect_params.py b/src/openint/types/client_pre_connect_params.py new file mode 100644 index 0000000..976d29c --- /dev/null +++ b/src/openint/types/client_pre_connect_params.py @@ -0,0 +1,2286 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Union, Iterable +from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict + +from .._utils import PropertyInfo + +__all__ = [ + "ClientPreConnectParams", + "DiscriminatedData", + "DiscriminatedDataConnectorAcceloDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAcceloDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAcmeApikeyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAcmeOauth2DiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAcmeOauth2DiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAdobeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAdobeDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAdyenDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAdyenDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAircallDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAircallDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAmazonDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAmazonDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorApaleoDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorApaleoDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAsanaDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAsanaDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAttioDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAttioDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAuth0DiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAuth0DiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAutodeskDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAutodeskDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAwsDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorAwsDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBamboohrDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBamboohrDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBasecampDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBasecampDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBattlenetDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBattlenetDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBigcommerceDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBigcommerceDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBitbucketDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBitbucketDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBitlyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBitlyDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBlackbaudDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBlackbaudDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBoldsignDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBoldsignDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBoxDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBoxDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorBraintreeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBraintreeDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorCalendlyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorCalendlyDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorClickupDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorClickupDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorCloseDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorCloseDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorConfluenceDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorConfluenceDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorContentfulDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorContentfulDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorContentstackDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorContentstackDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorCopperDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorCopperDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorCorosDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorCorosDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorDatevDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorDatevDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorDeelDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorDeelDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorDialpadDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorDialpadDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorDigitaloceanDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorDigitaloceanDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorDiscordDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorDiscordDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorDocusignDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorDocusignDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorDropboxDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorDropboxDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorEbayDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorEbayDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorEgnyteDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorEgnyteDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorEnvoyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorEnvoyDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorEventbriteDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorEventbriteDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorExistDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorExistDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorFacebookDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFacebookDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorFactorialDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFactorialDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorFigmaDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFigmaDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorFitbitDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFitbitDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorFortnoxDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFortnoxDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorFreshbooksDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFreshbooksDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorFrontDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFrontDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGitHubDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGitHubDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGitlabDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGitlabDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGongDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGongDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGoogleCalendarDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGoogleCalendarDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGoogleDocsDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGoogleDocsDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGoogleDriveDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGoogleDriveDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGoogleMailDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGoogleMailDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGoogleSheetDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGoogleSheetDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGorgiasDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGorgiasDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGrainDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGrainDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGumroadDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGumroadDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorGustoDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGustoDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorHarvestDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorHarvestDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorHighlevelDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorHighlevelDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorHubspotDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorHubspotDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorInstagramDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorInstagramDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorIntercomDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorIntercomDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorJiraDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorJiraDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorKeapDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorKeapDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorLeverDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorLeverDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorLinearDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorLinearDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorLinkedinDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorLinkedinDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorLinkhutDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorLinkhutDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorMailchimpDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorMailchimpDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorMiroDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorMiroDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorMondayDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorMondayDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorMuralDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorMuralDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorNamelyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorNamelyDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorNationbuilderDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorNationbuilderDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorNetsuiteDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorNetsuiteDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorNotionDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorNotionDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorOdooDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorOdooDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorOktaDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorOktaDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorOsuDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorOsuDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorOuraDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorOuraDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorOutreachDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorOutreachDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPagerdutyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPagerdutyDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPandadocDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPandadocDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPayfitDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPayfitDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPaypalDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPaypalDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPennylaneDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPennylaneDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPinterestDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPinterestDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPipedriveDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPipedriveDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPodiumDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPodiumDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorProductboardDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorProductboardDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorQualtricsDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorQualtricsDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorQuickbooksDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorQuickbooksDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorRedditDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorRedditDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSageDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSageDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSalesforceDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSalesforceDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSalesloftDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSalesloftDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSegmentDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSegmentDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorServicem8DiscriminatedPreConnectInput", + "DiscriminatedDataConnectorServicem8DiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorServicenowDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorServicenowDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSharepointDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSharepointDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorShopifyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorShopifyDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSignnowDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSignnowDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSlackDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSlackDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSmartsheetDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSmartsheetDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSnowflakeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSnowflakeDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSpotifyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSpotifyDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSquarespaceDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSquarespaceDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorSquareupDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSquareupDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorStackexchangeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorStackexchangeDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorStravaDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorStravaDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTeamworkDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTeamworkDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTicktickDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTicktickDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTimelyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTimelyDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTodoistDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTodoistDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTremendousDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTremendousDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTsheetsteamDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTsheetsteamDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTumblrDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTumblrDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTwinfieldDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTwinfieldDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTwitchDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTwitchDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTwitterDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTwitterDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorTypeformDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTypeformDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorUberDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorUberDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorVimeoDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorVimeoDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorWakatimeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorWakatimeDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorWealthboxDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorWealthboxDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorWebflowDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorWebflowDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorWhoopDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorWhoopDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorWordpressDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorWordpressDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorWrikeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorWrikeDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorXeroDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorXeroDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorYahooDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorYahooDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorYandexDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorYandexDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorZapierDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorZapierDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorZendeskDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorZendeskDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorZenefitsDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorZenefitsDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorZohoDeskDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorZohoDeskDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorZohoDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorZohoDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorZoomDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorZoomDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorAirtableDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorApolloDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorBrexDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorCodaDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFinchDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorFinchDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorFirebaseDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorForeceiptDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorGreenhouseDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorHeronDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorLunchmoneyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorMercuryDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorMergeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorMergeDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorMootaDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorOnebrickDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorOpenledgerDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPlaidDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorPlaidDiscriminatedPreConnectInputPreConnectInput", + "DiscriminatedDataConnectorPostgresDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorRampDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSaltedgeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSharepointOnpremDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSlackAgentDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorSplitwiseDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorStripeDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTellerDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTogglDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorTwentyDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorVenmoDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorWiseDiscriminatedPreConnectInput", + "DiscriminatedDataConnectorYodleeDiscriminatedPreConnectInput", + "Options", +] + + +class ClientPreConnectParams(TypedDict, total=False): + connector_config_id: Required[str] + """ + Must correspond to data.connector_name. Technically id should imply + connector_name already but there is no way to specify a discriminated union with + id alone. + """ + + discriminated_data: Required[DiscriminatedData] + + options: Required[Options] + + +class DiscriminatedDataConnectorAcceloDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAcceloDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["accelo"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAcceloDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAcmeApikeyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["acme-apikey"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorAcmeOauth2DiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAcmeOauth2DiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["acme-oauth2"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAcmeOauth2DiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAdobeDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAdobeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["adobe"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAdobeDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAdyenDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAdyenDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["adyen"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAdyenDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAircallDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAircallDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["aircall"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAircallDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAmazonDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAmazonDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["amazon"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAmazonDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorApaleoDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorApaleoDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["apaleo"]] + + pre_connect_input: Required[DiscriminatedDataConnectorApaleoDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAsanaDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAsanaDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["asana"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAsanaDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAttioDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAttioDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["attio"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAttioDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAuth0DiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAuth0DiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["auth0"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAuth0DiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAutodeskDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAutodeskDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["autodesk"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAutodeskDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAwsDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorAwsDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["aws"]] + + pre_connect_input: Required[DiscriminatedDataConnectorAwsDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBamboohrDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBamboohrDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["bamboohr"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBamboohrDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBasecampDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBasecampDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["basecamp"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBasecampDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBattlenetDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBattlenetDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["battlenet"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBattlenetDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBigcommerceDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBigcommerceDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["bigcommerce"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBigcommerceDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBitbucketDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBitbucketDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["bitbucket"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBitbucketDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBitlyDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBitlyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["bitly"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBitlyDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBlackbaudDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBlackbaudDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["blackbaud"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBlackbaudDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBoldsignDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBoldsignDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["boldsign"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBoldsignDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBoxDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBoxDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["box"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBoxDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorBraintreeDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorBraintreeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["braintree"]] + + pre_connect_input: Required[DiscriminatedDataConnectorBraintreeDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorCalendlyDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorCalendlyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["calendly"]] + + pre_connect_input: Required[DiscriminatedDataConnectorCalendlyDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorClickupDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorClickupDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["clickup"]] + + pre_connect_input: Required[DiscriminatedDataConnectorClickupDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorCloseDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorCloseDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["close"]] + + pre_connect_input: Required[DiscriminatedDataConnectorCloseDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorConfluenceDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorConfluenceDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["confluence"]] + + pre_connect_input: Required[DiscriminatedDataConnectorConfluenceDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorContentfulDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorContentfulDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["contentful"]] + + pre_connect_input: Required[DiscriminatedDataConnectorContentfulDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorContentstackDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorContentstackDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["contentstack"]] + + pre_connect_input: Required[DiscriminatedDataConnectorContentstackDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorCopperDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorCopperDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["copper"]] + + pre_connect_input: Required[DiscriminatedDataConnectorCopperDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorCorosDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorCorosDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["coros"]] + + pre_connect_input: Required[DiscriminatedDataConnectorCorosDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorDatevDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorDatevDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["datev"]] + + pre_connect_input: Required[DiscriminatedDataConnectorDatevDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorDeelDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorDeelDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["deel"]] + + pre_connect_input: Required[DiscriminatedDataConnectorDeelDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorDialpadDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorDialpadDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["dialpad"]] + + pre_connect_input: Required[DiscriminatedDataConnectorDialpadDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorDigitaloceanDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorDigitaloceanDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["digitalocean"]] + + pre_connect_input: Required[DiscriminatedDataConnectorDigitaloceanDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorDiscordDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorDiscordDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["discord"]] + + pre_connect_input: Required[DiscriminatedDataConnectorDiscordDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorDocusignDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorDocusignDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["docusign"]] + + pre_connect_input: Required[DiscriminatedDataConnectorDocusignDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorDropboxDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorDropboxDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["dropbox"]] + + pre_connect_input: Required[DiscriminatedDataConnectorDropboxDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorEbayDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorEbayDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["ebay"]] + + pre_connect_input: Required[DiscriminatedDataConnectorEbayDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorEgnyteDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorEgnyteDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["egnyte"]] + + pre_connect_input: Required[DiscriminatedDataConnectorEgnyteDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorEnvoyDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorEnvoyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["envoy"]] + + pre_connect_input: Required[DiscriminatedDataConnectorEnvoyDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorEventbriteDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorEventbriteDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["eventbrite"]] + + pre_connect_input: Required[DiscriminatedDataConnectorEventbriteDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorExistDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorExistDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["exist"]] + + pre_connect_input: Required[DiscriminatedDataConnectorExistDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorFacebookDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorFacebookDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["facebook"]] + + pre_connect_input: Required[DiscriminatedDataConnectorFacebookDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorFactorialDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorFactorialDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["factorial"]] + + pre_connect_input: Required[DiscriminatedDataConnectorFactorialDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorFigmaDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorFigmaDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["figma"]] + + pre_connect_input: Required[DiscriminatedDataConnectorFigmaDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorFitbitDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorFitbitDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["fitbit"]] + + pre_connect_input: Required[DiscriminatedDataConnectorFitbitDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorFortnoxDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorFortnoxDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["fortnox"]] + + pre_connect_input: Required[DiscriminatedDataConnectorFortnoxDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorFreshbooksDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorFreshbooksDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["freshbooks"]] + + pre_connect_input: Required[DiscriminatedDataConnectorFreshbooksDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorFrontDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorFrontDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["front"]] + + pre_connect_input: Required[DiscriminatedDataConnectorFrontDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGitHubDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGitHubDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["github"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGitHubDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGitlabDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGitlabDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["gitlab"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGitlabDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGongDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGongDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["gong"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGongDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGoogleCalendarDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGoogleCalendarDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["google-calendar"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGoogleCalendarDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGoogleDocsDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGoogleDocsDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["google-docs"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGoogleDocsDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGoogleDriveDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGoogleDriveDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["google-drive"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGoogleDriveDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGoogleMailDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGoogleMailDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["google-mail"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGoogleMailDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGoogleSheetDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGoogleSheetDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["google-sheet"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGoogleSheetDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGorgiasDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGorgiasDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["gorgias"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGorgiasDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGrainDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGrainDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["grain"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGrainDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGumroadDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGumroadDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["gumroad"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGumroadDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorGustoDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorGustoDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["gusto"]] + + pre_connect_input: Required[DiscriminatedDataConnectorGustoDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorHarvestDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorHarvestDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["harvest"]] + + pre_connect_input: Required[DiscriminatedDataConnectorHarvestDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorHighlevelDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorHighlevelDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["highlevel"]] + + pre_connect_input: Required[DiscriminatedDataConnectorHighlevelDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorHubspotDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorHubspotDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["hubspot"]] + + pre_connect_input: Required[DiscriminatedDataConnectorHubspotDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorInstagramDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorInstagramDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["instagram"]] + + pre_connect_input: Required[DiscriminatedDataConnectorInstagramDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorIntercomDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorIntercomDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["intercom"]] + + pre_connect_input: Required[DiscriminatedDataConnectorIntercomDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorJiraDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorJiraDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["jira"]] + + pre_connect_input: Required[DiscriminatedDataConnectorJiraDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorKeapDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorKeapDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["keap"]] + + pre_connect_input: Required[DiscriminatedDataConnectorKeapDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorLeverDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorLeverDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["lever"]] + + pre_connect_input: Required[DiscriminatedDataConnectorLeverDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorLinearDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorLinearDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["linear"]] + + pre_connect_input: Required[DiscriminatedDataConnectorLinearDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorLinkedinDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorLinkedinDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["linkedin"]] + + pre_connect_input: Required[DiscriminatedDataConnectorLinkedinDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorLinkhutDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorLinkhutDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["linkhut"]] + + pre_connect_input: Required[DiscriminatedDataConnectorLinkhutDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorMailchimpDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorMailchimpDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["mailchimp"]] + + pre_connect_input: Required[DiscriminatedDataConnectorMailchimpDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorMiroDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorMiroDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["miro"]] + + pre_connect_input: Required[DiscriminatedDataConnectorMiroDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorMondayDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorMondayDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["monday"]] + + pre_connect_input: Required[DiscriminatedDataConnectorMondayDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorMuralDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorMuralDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["mural"]] + + pre_connect_input: Required[DiscriminatedDataConnectorMuralDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorNamelyDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorNamelyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["namely"]] + + pre_connect_input: Required[DiscriminatedDataConnectorNamelyDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorNationbuilderDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorNationbuilderDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["nationbuilder"]] + + pre_connect_input: Required[DiscriminatedDataConnectorNationbuilderDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorNetsuiteDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorNetsuiteDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["netsuite"]] + + pre_connect_input: Required[DiscriminatedDataConnectorNetsuiteDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorNotionDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorNotionDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["notion"]] + + pre_connect_input: Required[DiscriminatedDataConnectorNotionDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorOdooDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorOdooDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["odoo"]] + + pre_connect_input: Required[DiscriminatedDataConnectorOdooDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorOktaDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorOktaDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["okta"]] + + pre_connect_input: Required[DiscriminatedDataConnectorOktaDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorOsuDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorOsuDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["osu"]] + + pre_connect_input: Required[DiscriminatedDataConnectorOsuDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorOuraDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorOuraDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["oura"]] + + pre_connect_input: Required[DiscriminatedDataConnectorOuraDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorOutreachDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorOutreachDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["outreach"]] + + pre_connect_input: Required[DiscriminatedDataConnectorOutreachDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPagerdutyDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorPagerdutyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["pagerduty"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPagerdutyDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPandadocDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorPandadocDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["pandadoc"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPandadocDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPayfitDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorPayfitDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["payfit"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPayfitDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPaypalDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorPaypalDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["paypal"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPaypalDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPennylaneDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorPennylaneDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["pennylane"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPennylaneDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPinterestDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorPinterestDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["pinterest"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPinterestDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPipedriveDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorPipedriveDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["pipedrive"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPipedriveDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPodiumDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorPodiumDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["podium"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPodiumDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorProductboardDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorProductboardDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["productboard"]] + + pre_connect_input: Required[DiscriminatedDataConnectorProductboardDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorQualtricsDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorQualtricsDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["qualtrics"]] + + pre_connect_input: Required[DiscriminatedDataConnectorQualtricsDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorQuickbooksDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorQuickbooksDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["quickbooks"]] + + pre_connect_input: Required[DiscriminatedDataConnectorQuickbooksDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorRedditDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorRedditDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["reddit"]] + + pre_connect_input: Required[DiscriminatedDataConnectorRedditDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSageDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSageDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["sage"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSageDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSalesforceDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSalesforceDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["salesforce"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSalesforceDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSalesloftDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSalesloftDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["salesloft"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSalesloftDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSegmentDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSegmentDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["segment"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSegmentDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorServicem8DiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorServicem8DiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["servicem8"]] + + pre_connect_input: Required[DiscriminatedDataConnectorServicem8DiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorServicenowDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorServicenowDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["servicenow"]] + + pre_connect_input: Required[DiscriminatedDataConnectorServicenowDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSharepointDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSharepointDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["sharepoint"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSharepointDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorShopifyDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorShopifyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["shopify"]] + + pre_connect_input: Required[DiscriminatedDataConnectorShopifyDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSignnowDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSignnowDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["signnow"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSignnowDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSlackDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSlackDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["slack"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSlackDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSmartsheetDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSmartsheetDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["smartsheet"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSmartsheetDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSnowflakeDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSnowflakeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["snowflake"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSnowflakeDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSpotifyDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSpotifyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["spotify"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSpotifyDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSquarespaceDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSquarespaceDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["squarespace"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSquarespaceDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorSquareupDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorSquareupDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["squareup"]] + + pre_connect_input: Required[DiscriminatedDataConnectorSquareupDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorStackexchangeDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorStackexchangeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["stackexchange"]] + + pre_connect_input: Required[DiscriminatedDataConnectorStackexchangeDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorStravaDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorStravaDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["strava"]] + + pre_connect_input: Required[DiscriminatedDataConnectorStravaDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTeamworkDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTeamworkDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["teamwork"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTeamworkDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTicktickDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTicktickDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["ticktick"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTicktickDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTimelyDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTimelyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["timely"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTimelyDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTodoistDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTodoistDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["todoist"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTodoistDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTremendousDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTremendousDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["tremendous"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTremendousDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTsheetsteamDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTsheetsteamDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["tsheetsteam"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTsheetsteamDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTumblrDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTumblrDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["tumblr"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTumblrDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTwinfieldDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTwinfieldDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["twinfield"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTwinfieldDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTwitchDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTwitchDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["twitch"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTwitchDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTwitterDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTwitterDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["twitter"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTwitterDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorTypeformDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorTypeformDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["typeform"]] + + pre_connect_input: Required[DiscriminatedDataConnectorTypeformDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorUberDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorUberDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["uber"]] + + pre_connect_input: Required[DiscriminatedDataConnectorUberDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorVimeoDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorVimeoDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["vimeo"]] + + pre_connect_input: Required[DiscriminatedDataConnectorVimeoDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorWakatimeDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorWakatimeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["wakatime"]] + + pre_connect_input: Required[DiscriminatedDataConnectorWakatimeDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorWealthboxDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorWealthboxDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["wealthbox"]] + + pre_connect_input: Required[DiscriminatedDataConnectorWealthboxDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorWebflowDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorWebflowDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["webflow"]] + + pre_connect_input: Required[DiscriminatedDataConnectorWebflowDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorWhoopDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorWhoopDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["whoop"]] + + pre_connect_input: Required[DiscriminatedDataConnectorWhoopDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorWordpressDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorWordpressDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["wordpress"]] + + pre_connect_input: Required[DiscriminatedDataConnectorWordpressDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorWrikeDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorWrikeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["wrike"]] + + pre_connect_input: Required[DiscriminatedDataConnectorWrikeDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorXeroDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorXeroDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["xero"]] + + pre_connect_input: Required[DiscriminatedDataConnectorXeroDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorYahooDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorYahooDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["yahoo"]] + + pre_connect_input: Required[DiscriminatedDataConnectorYahooDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorYandexDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorYandexDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["yandex"]] + + pre_connect_input: Required[DiscriminatedDataConnectorYandexDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorZapierDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorZapierDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["zapier"]] + + pre_connect_input: Required[DiscriminatedDataConnectorZapierDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorZendeskDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorZendeskDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["zendesk"]] + + pre_connect_input: Required[DiscriminatedDataConnectorZendeskDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorZenefitsDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorZenefitsDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["zenefits"]] + + pre_connect_input: Required[DiscriminatedDataConnectorZenefitsDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorZohoDeskDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorZohoDeskDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["zoho-desk"]] + + pre_connect_input: Required[DiscriminatedDataConnectorZohoDeskDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorZohoDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorZohoDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["zoho"]] + + pre_connect_input: Required[DiscriminatedDataConnectorZohoDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorZoomDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + connection_id: str + """In case of re-connecting, id of the existing connection""" + + +class DiscriminatedDataConnectorZoomDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["zoom"]] + + pre_connect_input: Required[DiscriminatedDataConnectorZoomDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorAirtableDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["airtable"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorApolloDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["apollo"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorBrexDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["brex"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorCodaDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["coda"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorFinchDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + state: str + + +class DiscriminatedDataConnectorFinchDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["finch"]] + + pre_connect_input: Required[DiscriminatedDataConnectorFinchDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorFirebaseDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["firebase"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorForeceiptDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["foreceipt"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorGreenhouseDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["greenhouse"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorHeronDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["heron"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorLunchmoneyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["lunchmoney"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorMercuryDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["mercury"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorMergeDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + categories: Required[Iterable[object]] + + customer_email_address: str + + customer_organization_name: str + + +class DiscriminatedDataConnectorMergeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["merge"]] + + pre_connect_input: Required[DiscriminatedDataConnectorMergeDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorMootaDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["moota"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorOnebrickDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["onebrick"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorOpenledgerDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["openledger"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorPlaidDiscriminatedPreConnectInputPreConnectInput(TypedDict, total=False): + language: Literal["en", "fr", "es", "nl", "de"] + + sandbox_public_token_create: Annotated[bool, PropertyInfo(alias="sandboxPublicTokenCreate")] + + +class DiscriminatedDataConnectorPlaidDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["plaid"]] + + pre_connect_input: Required[DiscriminatedDataConnectorPlaidDiscriminatedPreConnectInputPreConnectInput] + + +class DiscriminatedDataConnectorPostgresDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["postgres"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorRampDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["ramp"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorSaltedgeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["saltedge"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorSharepointOnpremDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["sharepoint-onprem"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorSlackAgentDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["slack-agent"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorSplitwiseDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["splitwise"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorStripeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["stripe"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorTellerDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["teller"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorTogglDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["toggl"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorTwentyDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["twenty"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorVenmoDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["venmo"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorWiseDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["wise"]] + + pre_connect_input: Required[object] + + +class DiscriminatedDataConnectorYodleeDiscriminatedPreConnectInput(TypedDict, total=False): + connector_name: Required[Literal["yodlee"]] + + pre_connect_input: Required[object] + + +DiscriminatedData: TypeAlias = Union[ + DiscriminatedDataConnectorAcceloDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAcmeApikeyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAcmeOauth2DiscriminatedPreConnectInput, + DiscriminatedDataConnectorAdobeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAdyenDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAircallDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAmazonDiscriminatedPreConnectInput, + DiscriminatedDataConnectorApaleoDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAsanaDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAttioDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAuth0DiscriminatedPreConnectInput, + DiscriminatedDataConnectorAutodeskDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAwsDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBamboohrDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBasecampDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBattlenetDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBigcommerceDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBitbucketDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBitlyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBlackbaudDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBoldsignDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBoxDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBraintreeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorCalendlyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorClickupDiscriminatedPreConnectInput, + DiscriminatedDataConnectorCloseDiscriminatedPreConnectInput, + DiscriminatedDataConnectorConfluenceDiscriminatedPreConnectInput, + DiscriminatedDataConnectorContentfulDiscriminatedPreConnectInput, + DiscriminatedDataConnectorContentstackDiscriminatedPreConnectInput, + DiscriminatedDataConnectorCopperDiscriminatedPreConnectInput, + DiscriminatedDataConnectorCorosDiscriminatedPreConnectInput, + DiscriminatedDataConnectorDatevDiscriminatedPreConnectInput, + DiscriminatedDataConnectorDeelDiscriminatedPreConnectInput, + DiscriminatedDataConnectorDialpadDiscriminatedPreConnectInput, + DiscriminatedDataConnectorDigitaloceanDiscriminatedPreConnectInput, + DiscriminatedDataConnectorDiscordDiscriminatedPreConnectInput, + DiscriminatedDataConnectorDocusignDiscriminatedPreConnectInput, + DiscriminatedDataConnectorDropboxDiscriminatedPreConnectInput, + DiscriminatedDataConnectorEbayDiscriminatedPreConnectInput, + DiscriminatedDataConnectorEgnyteDiscriminatedPreConnectInput, + DiscriminatedDataConnectorEnvoyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorEventbriteDiscriminatedPreConnectInput, + DiscriminatedDataConnectorExistDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFacebookDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFactorialDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFigmaDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFitbitDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFortnoxDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFreshbooksDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFrontDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGitHubDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGitlabDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGongDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGoogleCalendarDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGoogleDocsDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGoogleDriveDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGoogleMailDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGoogleSheetDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGorgiasDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGrainDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGumroadDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGustoDiscriminatedPreConnectInput, + DiscriminatedDataConnectorHarvestDiscriminatedPreConnectInput, + DiscriminatedDataConnectorHighlevelDiscriminatedPreConnectInput, + DiscriminatedDataConnectorHubspotDiscriminatedPreConnectInput, + DiscriminatedDataConnectorInstagramDiscriminatedPreConnectInput, + DiscriminatedDataConnectorIntercomDiscriminatedPreConnectInput, + DiscriminatedDataConnectorJiraDiscriminatedPreConnectInput, + DiscriminatedDataConnectorKeapDiscriminatedPreConnectInput, + DiscriminatedDataConnectorLeverDiscriminatedPreConnectInput, + DiscriminatedDataConnectorLinearDiscriminatedPreConnectInput, + DiscriminatedDataConnectorLinkedinDiscriminatedPreConnectInput, + DiscriminatedDataConnectorLinkhutDiscriminatedPreConnectInput, + DiscriminatedDataConnectorMailchimpDiscriminatedPreConnectInput, + DiscriminatedDataConnectorMiroDiscriminatedPreConnectInput, + DiscriminatedDataConnectorMondayDiscriminatedPreConnectInput, + DiscriminatedDataConnectorMuralDiscriminatedPreConnectInput, + DiscriminatedDataConnectorNamelyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorNationbuilderDiscriminatedPreConnectInput, + DiscriminatedDataConnectorNetsuiteDiscriminatedPreConnectInput, + DiscriminatedDataConnectorNotionDiscriminatedPreConnectInput, + DiscriminatedDataConnectorOdooDiscriminatedPreConnectInput, + DiscriminatedDataConnectorOktaDiscriminatedPreConnectInput, + DiscriminatedDataConnectorOsuDiscriminatedPreConnectInput, + DiscriminatedDataConnectorOuraDiscriminatedPreConnectInput, + DiscriminatedDataConnectorOutreachDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPagerdutyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPandadocDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPayfitDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPaypalDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPennylaneDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPinterestDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPipedriveDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPodiumDiscriminatedPreConnectInput, + DiscriminatedDataConnectorProductboardDiscriminatedPreConnectInput, + DiscriminatedDataConnectorQualtricsDiscriminatedPreConnectInput, + DiscriminatedDataConnectorQuickbooksDiscriminatedPreConnectInput, + DiscriminatedDataConnectorRedditDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSageDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSalesforceDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSalesloftDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSegmentDiscriminatedPreConnectInput, + DiscriminatedDataConnectorServicem8DiscriminatedPreConnectInput, + DiscriminatedDataConnectorServicenowDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSharepointDiscriminatedPreConnectInput, + DiscriminatedDataConnectorShopifyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSignnowDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSlackDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSmartsheetDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSnowflakeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSpotifyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSquarespaceDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSquareupDiscriminatedPreConnectInput, + DiscriminatedDataConnectorStackexchangeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorStravaDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTeamworkDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTicktickDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTimelyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTodoistDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTremendousDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTsheetsteamDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTumblrDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTwinfieldDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTwitchDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTwitterDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTypeformDiscriminatedPreConnectInput, + DiscriminatedDataConnectorUberDiscriminatedPreConnectInput, + DiscriminatedDataConnectorVimeoDiscriminatedPreConnectInput, + DiscriminatedDataConnectorWakatimeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorWealthboxDiscriminatedPreConnectInput, + DiscriminatedDataConnectorWebflowDiscriminatedPreConnectInput, + DiscriminatedDataConnectorWhoopDiscriminatedPreConnectInput, + DiscriminatedDataConnectorWordpressDiscriminatedPreConnectInput, + DiscriminatedDataConnectorWrikeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorXeroDiscriminatedPreConnectInput, + DiscriminatedDataConnectorYahooDiscriminatedPreConnectInput, + DiscriminatedDataConnectorYandexDiscriminatedPreConnectInput, + DiscriminatedDataConnectorZapierDiscriminatedPreConnectInput, + DiscriminatedDataConnectorZendeskDiscriminatedPreConnectInput, + DiscriminatedDataConnectorZenefitsDiscriminatedPreConnectInput, + DiscriminatedDataConnectorZohoDeskDiscriminatedPreConnectInput, + DiscriminatedDataConnectorZohoDiscriminatedPreConnectInput, + DiscriminatedDataConnectorZoomDiscriminatedPreConnectInput, + DiscriminatedDataConnectorAirtableDiscriminatedPreConnectInput, + DiscriminatedDataConnectorApolloDiscriminatedPreConnectInput, + DiscriminatedDataConnectorBrexDiscriminatedPreConnectInput, + DiscriminatedDataConnectorCodaDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFinchDiscriminatedPreConnectInput, + DiscriminatedDataConnectorFirebaseDiscriminatedPreConnectInput, + DiscriminatedDataConnectorForeceiptDiscriminatedPreConnectInput, + DiscriminatedDataConnectorGreenhouseDiscriminatedPreConnectInput, + DiscriminatedDataConnectorHeronDiscriminatedPreConnectInput, + DiscriminatedDataConnectorLunchmoneyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorMercuryDiscriminatedPreConnectInput, + DiscriminatedDataConnectorMergeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorMootaDiscriminatedPreConnectInput, + DiscriminatedDataConnectorOnebrickDiscriminatedPreConnectInput, + DiscriminatedDataConnectorOpenledgerDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPlaidDiscriminatedPreConnectInput, + DiscriminatedDataConnectorPostgresDiscriminatedPreConnectInput, + DiscriminatedDataConnectorRampDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSaltedgeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSharepointOnpremDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSlackAgentDiscriminatedPreConnectInput, + DiscriminatedDataConnectorSplitwiseDiscriminatedPreConnectInput, + DiscriminatedDataConnectorStripeDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTellerDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTogglDiscriminatedPreConnectInput, + DiscriminatedDataConnectorTwentyDiscriminatedPreConnectInput, + DiscriminatedDataConnectorVenmoDiscriminatedPreConnectInput, + DiscriminatedDataConnectorWiseDiscriminatedPreConnectInput, + DiscriminatedDataConnectorYodleeDiscriminatedPreConnectInput, +] + + +class Options(TypedDict, total=False): + connection_external_id: Annotated[Union[str, float, None], PropertyInfo(alias="connectionExternalId")] + + integration_external_id: Annotated[Union[str, float, None], PropertyInfo(alias="integrationExternalId")] diff --git a/src/openint/types/connector_rpc_response.py b/src/openint/types/connector_rpc_response.py new file mode 100644 index 0000000..35a159d --- /dev/null +++ b/src/openint/types/connector_rpc_response.py @@ -0,0 +1,8 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Dict +from typing_extensions import TypeAlias + +__all__ = ["ConnectorRpcResponse"] + +ConnectorRpcResponse: TypeAlias = Dict[str, object] diff --git a/src/openint/types/create_connection_response.py b/src/openint/types/create_connection_response.py index cc5ec23..fca7e04 100644 --- a/src/openint/types/create_connection_response.py +++ b/src/openint/types/create_connection_response.py @@ -623,6 +623,8 @@ "ConnectorSaltedgeDiscriminatedConnectionSettings", "ConnectorSharepointOnpremDiscriminatedConnectionSettings", "ConnectorSharepointOnpremDiscriminatedConnectionSettingsSettings", + "ConnectorSlackAgentDiscriminatedConnectionSettings", + "ConnectorSlackAgentDiscriminatedConnectionSettingsSettings", "ConnectorSplitwiseDiscriminatedConnectionSettings", "ConnectorSplitwiseDiscriminatedConnectionSettingsSettings", "ConnectorSplitwiseDiscriminatedConnectionSettingsSettingsCurrentUser", @@ -12323,6 +12325,44 @@ class ConnectorSharepointOnpremDiscriminatedConnectionSettings(BaseModel): updated_at: Optional[str] = None +class ConnectorSlackAgentDiscriminatedConnectionSettingsSettings(BaseModel): + bot_access_token: str + """Bot OAuth token - xoxb-...""" + + +class ConnectorSlackAgentDiscriminatedConnectionSettings(BaseModel): + connector_name: Literal["slack-agent"] + + id: Optional[str] = None + + connector_config_id: Optional[str] = None + + created_at: Optional[str] = None + + customer_id: Optional[str] = None + + disabled: Optional[bool] = None + + display_name: Optional[str] = None + + integration_id: Optional[str] = None + + metadata: Optional[Dict[str, object]] = None + """ + JSON object can can be used to associate arbitrary metadata to avoid needing a + separate 1-1 table just for simple key values in your application. During + updates this object will be shallowly merged + """ + + settings: Optional[ConnectorSlackAgentDiscriminatedConnectionSettingsSettings] = None + + status: Optional[Literal["healthy", "disconnected", "error", "manual", "unknown"]] = None + + status_message: Optional[str] = None + + updated_at: Optional[str] = None + + class ConnectorSplitwiseDiscriminatedConnectionSettingsSettingsCurrentUserNotifications(BaseModel): added_as_friend: bool @@ -12901,6 +12941,7 @@ class ConnectorYodleeDiscriminatedConnectionSettings(BaseModel): ConnectorRampDiscriminatedConnectionSettings, ConnectorSaltedgeDiscriminatedConnectionSettings, ConnectorSharepointOnpremDiscriminatedConnectionSettings, + ConnectorSlackAgentDiscriminatedConnectionSettings, ConnectorSplitwiseDiscriminatedConnectionSettings, ConnectorStripeDiscriminatedConnectionSettings, ConnectorTellerDiscriminatedConnectionSettings, diff --git a/src/openint/types/create_connnector_config_response.py b/src/openint/types/create_connnector_config_response.py index 3d7b228..eec01f0 100644 --- a/src/openint/types/create_connnector_config_response.py +++ b/src/openint/types/create_connnector_config_response.py @@ -472,6 +472,8 @@ "ConnectorSaltedgeDiscriminatedConnectorConfig", "ConnectorSaltedgeDiscriminatedConnectorConfigConfig", "ConnectorSharepointOnpremDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfigConfig", "ConnectorSplitwiseDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfigConfig", @@ -6992,6 +6994,63 @@ class ConnectorSharepointOnpremDiscriminatedConnectorConfig(BaseModel): updated_at: Optional[str] = None +class ConnectorSlackAgentDiscriminatedConnectorConfigConfig(BaseModel): + challenge_code: str + """Previous challenge code - e.g. challenge_slack_abc123xyz""" + + challenge_response: str + """USER_PASTED_TOKEN - SLACK_ONETIME_CHALLENGE_CODE""" + + app_id: Optional[str] = None + """App ID - A1234567890""" + + client_id: Optional[str] = None + """Client ID - 1234567890.1234567890""" + + client_secret: Optional[str] = None + """Client secret - abc123...""" + + event_subscription_url: Optional[str] = None + """Initial event subscription URL""" + + initial_oauth_url: Optional[str] = None + """Initial OAuth URL - https://slack.com/oauth/v2/authorize?...""" + + service_token: Optional[str] = None + """Service token - xoxb-...""" + + signing_secret: Optional[str] = None + """Signing secret - abc123...""" + + verification_token: Optional[str] = None + """Verification token - xyz123...""" + + +class ConnectorSlackAgentDiscriminatedConnectorConfig(BaseModel): + config: ConnectorSlackAgentDiscriminatedConnectorConfigConfig + + connector_name: Literal["slack-agent"] + + id: Optional[str] = None + + created_at: Optional[str] = None + + disabled: Optional[bool] = None + + display_name: Optional[str] = None + + metadata: Optional[Dict[str, object]] = None + """ + JSON object can can be used to associate arbitrary metadata to avoid needing a + separate 1-1 table just for simple key values in your application. During + updates this object will be shallowly merged + """ + + org_id: Optional[str] = None + + updated_at: Optional[str] = None + + class ConnectorSplitwiseDiscriminatedConnectorConfig(BaseModel): config: object @@ -7410,6 +7469,7 @@ class ConnectorYodleeDiscriminatedConnectorConfig(BaseModel): ConnectorRampDiscriminatedConnectorConfig, ConnectorSaltedgeDiscriminatedConnectorConfig, ConnectorSharepointOnpremDiscriminatedConnectorConfig, + ConnectorSlackAgentDiscriminatedConnectorConfig, ConnectorSplitwiseDiscriminatedConnectorConfig, ConnectorStripeDiscriminatedConnectorConfig, ConnectorTellerDiscriminatedConnectorConfig, diff --git a/src/openint/types/get_conector_config_response.py b/src/openint/types/get_conector_config_response.py index 963ca91..848ef81 100644 --- a/src/openint/types/get_conector_config_response.py +++ b/src/openint/types/get_conector_config_response.py @@ -474,6 +474,8 @@ "ConnectorSaltedgeDiscriminatedConnectorConfig", "ConnectorSaltedgeDiscriminatedConnectorConfigConfig", "ConnectorSharepointOnpremDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfigConfig", "ConnectorSplitwiseDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfigConfig", @@ -7972,6 +7974,69 @@ class ConnectorSharepointOnpremDiscriminatedConnectorConfig(BaseModel): updated_at: Optional[str] = None +class ConnectorSlackAgentDiscriminatedConnectorConfigConfig(BaseModel): + challenge_code: str + """Previous challenge code - e.g. challenge_slack_abc123xyz""" + + challenge_response: str + """USER_PASTED_TOKEN - SLACK_ONETIME_CHALLENGE_CODE""" + + app_id: Optional[str] = None + """App ID - A1234567890""" + + client_id: Optional[str] = None + """Client ID - 1234567890.1234567890""" + + client_secret: Optional[str] = None + """Client secret - abc123...""" + + event_subscription_url: Optional[str] = None + """Initial event subscription URL""" + + initial_oauth_url: Optional[str] = None + """Initial OAuth URL - https://slack.com/oauth/v2/authorize?...""" + + service_token: Optional[str] = None + """Service token - xoxb-...""" + + signing_secret: Optional[str] = None + """Signing secret - abc123...""" + + verification_token: Optional[str] = None + """Verification token - xyz123...""" + + +class ConnectorSlackAgentDiscriminatedConnectorConfig(BaseModel): + config: ConnectorSlackAgentDiscriminatedConnectorConfigConfig + + connector_name: Literal["slack-agent"] + + id: Optional[str] = None + + connection_count: Optional[float] = None + + connector: Optional[Connector] = None + + created_at: Optional[str] = None + + disabled: Optional[bool] = None + + display_name: Optional[str] = None + + integrations: Optional[Dict[str, Integration]] = None + + metadata: Optional[Dict[str, object]] = None + """ + JSON object can can be used to associate arbitrary metadata to avoid needing a + separate 1-1 table just for simple key values in your application. During + updates this object will be shallowly merged + """ + + org_id: Optional[str] = None + + updated_at: Optional[str] = None + + class ConnectorSplitwiseDiscriminatedConnectorConfig(BaseModel): config: object @@ -8438,6 +8503,7 @@ class ConnectorYodleeDiscriminatedConnectorConfig(BaseModel): ConnectorRampDiscriminatedConnectorConfig, ConnectorSaltedgeDiscriminatedConnectorConfig, ConnectorSharepointOnpremDiscriminatedConnectorConfig, + ConnectorSlackAgentDiscriminatedConnectorConfig, ConnectorSplitwiseDiscriminatedConnectorConfig, ConnectorStripeDiscriminatedConnectorConfig, ConnectorTellerDiscriminatedConnectorConfig, diff --git a/src/openint/types/get_connection_response.py b/src/openint/types/get_connection_response.py index 3ea9a4e..f2eb335 100644 --- a/src/openint/types/get_connection_response.py +++ b/src/openint/types/get_connection_response.py @@ -625,6 +625,8 @@ "ConnectorSaltedgeDiscriminatedConnectionSettings", "ConnectorSharepointOnpremDiscriminatedConnectionSettings", "ConnectorSharepointOnpremDiscriminatedConnectionSettingsSettings", + "ConnectorSlackAgentDiscriminatedConnectionSettings", + "ConnectorSlackAgentDiscriminatedConnectionSettingsSettings", "ConnectorSplitwiseDiscriminatedConnectionSettings", "ConnectorSplitwiseDiscriminatedConnectionSettingsSettings", "ConnectorSplitwiseDiscriminatedConnectionSettingsSettingsCurrentUser", @@ -12977,6 +12979,48 @@ class ConnectorSharepointOnpremDiscriminatedConnectionSettings(BaseModel): updated_at: Optional[str] = None +class ConnectorSlackAgentDiscriminatedConnectionSettingsSettings(BaseModel): + bot_access_token: str + """Bot OAuth token - xoxb-...""" + + +class ConnectorSlackAgentDiscriminatedConnectionSettings(BaseModel): + connector_name: Literal["slack-agent"] + + id: Optional[str] = None + + connector: Optional[Connector] = None + + connector_config_id: Optional[str] = None + + created_at: Optional[str] = None + + customer_id: Optional[str] = None + + disabled: Optional[bool] = None + + display_name: Optional[str] = None + + integration: Optional[Integration] = None + + integration_id: Optional[str] = None + + metadata: Optional[Dict[str, object]] = None + """ + JSON object can can be used to associate arbitrary metadata to avoid needing a + separate 1-1 table just for simple key values in your application. During + updates this object will be shallowly merged + """ + + settings: Optional[ConnectorSlackAgentDiscriminatedConnectionSettingsSettings] = None + + status: Optional[Literal["healthy", "disconnected", "error", "manual", "unknown"]] = None + + status_message: Optional[str] = None + + updated_at: Optional[str] = None + + class ConnectorSplitwiseDiscriminatedConnectionSettingsSettingsCurrentUserNotifications(BaseModel): added_as_friend: bool @@ -13587,6 +13631,7 @@ class ConnectorYodleeDiscriminatedConnectionSettings(BaseModel): ConnectorRampDiscriminatedConnectionSettings, ConnectorSaltedgeDiscriminatedConnectionSettings, ConnectorSharepointOnpremDiscriminatedConnectionSettings, + ConnectorSlackAgentDiscriminatedConnectionSettings, ConnectorSplitwiseDiscriminatedConnectionSettings, ConnectorStripeDiscriminatedConnectionSettings, ConnectorTellerDiscriminatedConnectionSettings, diff --git a/src/openint/types/integration.py b/src/openint/types/integration.py index e1cad7e..a7c975e 100644 --- a/src/openint/types/integration.py +++ b/src/openint/types/integration.py @@ -140,6 +140,7 @@ class Integration(BaseModel): "shopify", "signnow", "slack", + "slack-agent", "smartsheet", "snowflake", "splitwise", diff --git a/src/openint/types/list_connections_response.py b/src/openint/types/list_connections_response.py index 66722c5..49c910d 100644 --- a/src/openint/types/list_connections_response.py +++ b/src/openint/types/list_connections_response.py @@ -625,6 +625,8 @@ "ConnectorSaltedgeDiscriminatedConnectionSettings", "ConnectorSharepointOnpremDiscriminatedConnectionSettings", "ConnectorSharepointOnpremDiscriminatedConnectionSettingsSettings", + "ConnectorSlackAgentDiscriminatedConnectionSettings", + "ConnectorSlackAgentDiscriminatedConnectionSettingsSettings", "ConnectorSplitwiseDiscriminatedConnectionSettings", "ConnectorSplitwiseDiscriminatedConnectionSettingsSettings", "ConnectorSplitwiseDiscriminatedConnectionSettingsSettingsCurrentUser", @@ -12977,6 +12979,48 @@ class ConnectorSharepointOnpremDiscriminatedConnectionSettings(BaseModel): updated_at: Optional[str] = None +class ConnectorSlackAgentDiscriminatedConnectionSettingsSettings(BaseModel): + bot_access_token: str + """Bot OAuth token - xoxb-...""" + + +class ConnectorSlackAgentDiscriminatedConnectionSettings(BaseModel): + connector_name: Literal["slack-agent"] + + id: Optional[str] = None + + connector: Optional[Connector] = None + + connector_config_id: Optional[str] = None + + created_at: Optional[str] = None + + customer_id: Optional[str] = None + + disabled: Optional[bool] = None + + display_name: Optional[str] = None + + integration: Optional[Integration] = None + + integration_id: Optional[str] = None + + metadata: Optional[Dict[str, object]] = None + """ + JSON object can can be used to associate arbitrary metadata to avoid needing a + separate 1-1 table just for simple key values in your application. During + updates this object will be shallowly merged + """ + + settings: Optional[ConnectorSlackAgentDiscriminatedConnectionSettingsSettings] = None + + status: Optional[Literal["healthy", "disconnected", "error", "manual", "unknown"]] = None + + status_message: Optional[str] = None + + updated_at: Optional[str] = None + + class ConnectorSplitwiseDiscriminatedConnectionSettingsSettingsCurrentUserNotifications(BaseModel): added_as_friend: bool @@ -13587,6 +13631,7 @@ class ConnectorYodleeDiscriminatedConnectionSettings(BaseModel): ConnectorRampDiscriminatedConnectionSettings, ConnectorSaltedgeDiscriminatedConnectionSettings, ConnectorSharepointOnpremDiscriminatedConnectionSettings, + ConnectorSlackAgentDiscriminatedConnectionSettings, ConnectorSplitwiseDiscriminatedConnectionSettings, ConnectorStripeDiscriminatedConnectionSettings, ConnectorTellerDiscriminatedConnectionSettings, diff --git a/src/openint/types/list_connection_configs_response.py b/src/openint/types/list_connector_configs_response.py similarity index 99% rename from src/openint/types/list_connection_configs_response.py rename to src/openint/types/list_connector_configs_response.py index b86432a..31e40cb 100644 --- a/src/openint/types/list_connection_configs_response.py +++ b/src/openint/types/list_connector_configs_response.py @@ -10,7 +10,7 @@ from .integration import Integration __all__ = [ - "ListConnectionConfigsResponse", + "ListConnectorConfigsResponse", "ConnectorAcceloDiscriminatedConnectorConfig", "ConnectorAcceloDiscriminatedConnectorConfigConfig", "ConnectorAcceloDiscriminatedConnectorConfigConfigOAuth", @@ -474,6 +474,8 @@ "ConnectorSaltedgeDiscriminatedConnectorConfig", "ConnectorSaltedgeDiscriminatedConnectorConfigConfig", "ConnectorSharepointOnpremDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfigConfig", "ConnectorSplitwiseDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfigConfig", @@ -7972,6 +7974,69 @@ class ConnectorSharepointOnpremDiscriminatedConnectorConfig(BaseModel): updated_at: Optional[str] = None +class ConnectorSlackAgentDiscriminatedConnectorConfigConfig(BaseModel): + challenge_code: str + """Previous challenge code - e.g. challenge_slack_abc123xyz""" + + challenge_response: str + """USER_PASTED_TOKEN - SLACK_ONETIME_CHALLENGE_CODE""" + + app_id: Optional[str] = None + """App ID - A1234567890""" + + client_id: Optional[str] = None + """Client ID - 1234567890.1234567890""" + + client_secret: Optional[str] = None + """Client secret - abc123...""" + + event_subscription_url: Optional[str] = None + """Initial event subscription URL""" + + initial_oauth_url: Optional[str] = None + """Initial OAuth URL - https://slack.com/oauth/v2/authorize?...""" + + service_token: Optional[str] = None + """Service token - xoxb-...""" + + signing_secret: Optional[str] = None + """Signing secret - abc123...""" + + verification_token: Optional[str] = None + """Verification token - xyz123...""" + + +class ConnectorSlackAgentDiscriminatedConnectorConfig(BaseModel): + config: ConnectorSlackAgentDiscriminatedConnectorConfigConfig + + connector_name: Literal["slack-agent"] + + id: Optional[str] = None + + connection_count: Optional[float] = None + + connector: Optional[Connector] = None + + created_at: Optional[str] = None + + disabled: Optional[bool] = None + + display_name: Optional[str] = None + + integrations: Optional[Dict[str, Integration]] = None + + metadata: Optional[Dict[str, object]] = None + """ + JSON object can can be used to associate arbitrary metadata to avoid needing a + separate 1-1 table just for simple key values in your application. During + updates this object will be shallowly merged + """ + + org_id: Optional[str] = None + + updated_at: Optional[str] = None + + class ConnectorSplitwiseDiscriminatedConnectorConfig(BaseModel): config: object @@ -8274,7 +8339,7 @@ class ConnectorYodleeDiscriminatedConnectorConfig(BaseModel): updated_at: Optional[str] = None -ListConnectionConfigsResponse: TypeAlias = Union[ +ListConnectorConfigsResponse: TypeAlias = Union[ ConnectorAcceloDiscriminatedConnectorConfig, ConnectorAcmeApikeyDiscriminatedConnectorConfig, ConnectorAcmeOauth2DiscriminatedConnectorConfig, @@ -8438,6 +8503,7 @@ class ConnectorYodleeDiscriminatedConnectorConfig(BaseModel): ConnectorRampDiscriminatedConnectorConfig, ConnectorSaltedgeDiscriminatedConnectorConfig, ConnectorSharepointOnpremDiscriminatedConnectorConfig, + ConnectorSlackAgentDiscriminatedConnectorConfig, ConnectorSplitwiseDiscriminatedConnectorConfig, ConnectorStripeDiscriminatedConnectorConfig, ConnectorTellerDiscriminatedConnectorConfig, diff --git a/src/openint/types/list_connnector_configs_response.py b/src/openint/types/list_connnector_configs_response.py index df9c242..2341bde 100644 --- a/src/openint/types/list_connnector_configs_response.py +++ b/src/openint/types/list_connnector_configs_response.py @@ -474,6 +474,8 @@ "ConnectorSaltedgeDiscriminatedConnectorConfig", "ConnectorSaltedgeDiscriminatedConnectorConfigConfig", "ConnectorSharepointOnpremDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfigConfig", "ConnectorSplitwiseDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfigConfig", @@ -7972,6 +7974,69 @@ class ConnectorSharepointOnpremDiscriminatedConnectorConfig(BaseModel): updated_at: Optional[str] = None +class ConnectorSlackAgentDiscriminatedConnectorConfigConfig(BaseModel): + challenge_code: str + """Previous challenge code - e.g. challenge_slack_abc123xyz""" + + challenge_response: str + """USER_PASTED_TOKEN - SLACK_ONETIME_CHALLENGE_CODE""" + + app_id: Optional[str] = None + """App ID - A1234567890""" + + client_id: Optional[str] = None + """Client ID - 1234567890.1234567890""" + + client_secret: Optional[str] = None + """Client secret - abc123...""" + + event_subscription_url: Optional[str] = None + """Initial event subscription URL""" + + initial_oauth_url: Optional[str] = None + """Initial OAuth URL - https://slack.com/oauth/v2/authorize?...""" + + service_token: Optional[str] = None + """Service token - xoxb-...""" + + signing_secret: Optional[str] = None + """Signing secret - abc123...""" + + verification_token: Optional[str] = None + """Verification token - xyz123...""" + + +class ConnectorSlackAgentDiscriminatedConnectorConfig(BaseModel): + config: ConnectorSlackAgentDiscriminatedConnectorConfigConfig + + connector_name: Literal["slack-agent"] + + id: Optional[str] = None + + connection_count: Optional[float] = None + + connector: Optional[Connector] = None + + created_at: Optional[str] = None + + disabled: Optional[bool] = None + + display_name: Optional[str] = None + + integrations: Optional[Dict[str, Integration]] = None + + metadata: Optional[Dict[str, object]] = None + """ + JSON object can can be used to associate arbitrary metadata to avoid needing a + separate 1-1 table just for simple key values in your application. During + updates this object will be shallowly merged + """ + + org_id: Optional[str] = None + + updated_at: Optional[str] = None + + class ConnectorSplitwiseDiscriminatedConnectorConfig(BaseModel): config: object @@ -8438,6 +8503,7 @@ class ConnectorYodleeDiscriminatedConnectorConfig(BaseModel): ConnectorRampDiscriminatedConnectorConfig, ConnectorSaltedgeDiscriminatedConnectorConfig, ConnectorSharepointOnpremDiscriminatedConnectorConfig, + ConnectorSlackAgentDiscriminatedConnectorConfig, ConnectorSplitwiseDiscriminatedConnectorConfig, ConnectorStripeDiscriminatedConnectorConfig, ConnectorTellerDiscriminatedConnectorConfig, diff --git a/src/openint/types/pre_configure_connector_response.py b/src/openint/types/pre_configure_connector_response.py new file mode 100644 index 0000000..952e8fc --- /dev/null +++ b/src/openint/types/pre_configure_connector_response.py @@ -0,0 +1,8 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Dict +from typing_extensions import TypeAlias + +__all__ = ["PreConfigureConnectorResponse"] + +PreConfigureConnectorResponse: TypeAlias = Dict[str, object] diff --git a/src/openint/types/pre_connect_response.py b/src/openint/types/pre_connect_response.py new file mode 100644 index 0000000..5ca02c4 --- /dev/null +++ b/src/openint/types/pre_connect_response.py @@ -0,0 +1,2769 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Union, Optional +from typing_extensions import Literal, Annotated, TypeAlias + +from pydantic import Field as FieldInfo + +from .._utils import PropertyInfo +from .._models import BaseModel + +__all__ = [ + "PreConnectResponse", + "ConnectorAcceloDiscriminatedConnectInput", + "ConnectorAcceloDiscriminatedConnectInputConnectInput", + "ConnectorAcmeApikeyDiscriminatedConnectInput", + "ConnectorAcmeOauth2DiscriminatedConnectInput", + "ConnectorAcmeOauth2DiscriminatedConnectInputConnectInput", + "ConnectorAdobeDiscriminatedConnectInput", + "ConnectorAdobeDiscriminatedConnectInputConnectInput", + "ConnectorAdyenDiscriminatedConnectInput", + "ConnectorAdyenDiscriminatedConnectInputConnectInput", + "ConnectorAircallDiscriminatedConnectInput", + "ConnectorAircallDiscriminatedConnectInputConnectInput", + "ConnectorAmazonDiscriminatedConnectInput", + "ConnectorAmazonDiscriminatedConnectInputConnectInput", + "ConnectorApaleoDiscriminatedConnectInput", + "ConnectorApaleoDiscriminatedConnectInputConnectInput", + "ConnectorAsanaDiscriminatedConnectInput", + "ConnectorAsanaDiscriminatedConnectInputConnectInput", + "ConnectorAttioDiscriminatedConnectInput", + "ConnectorAttioDiscriminatedConnectInputConnectInput", + "ConnectorAuth0DiscriminatedConnectInput", + "ConnectorAuth0DiscriminatedConnectInputConnectInput", + "ConnectorAutodeskDiscriminatedConnectInput", + "ConnectorAutodeskDiscriminatedConnectInputConnectInput", + "ConnectorAwsDiscriminatedConnectInput", + "ConnectorAwsDiscriminatedConnectInputConnectInput", + "ConnectorBamboohrDiscriminatedConnectInput", + "ConnectorBamboohrDiscriminatedConnectInputConnectInput", + "ConnectorBasecampDiscriminatedConnectInput", + "ConnectorBasecampDiscriminatedConnectInputConnectInput", + "ConnectorBattlenetDiscriminatedConnectInput", + "ConnectorBattlenetDiscriminatedConnectInputConnectInput", + "ConnectorBigcommerceDiscriminatedConnectInput", + "ConnectorBigcommerceDiscriminatedConnectInputConnectInput", + "ConnectorBitbucketDiscriminatedConnectInput", + "ConnectorBitbucketDiscriminatedConnectInputConnectInput", + "ConnectorBitlyDiscriminatedConnectInput", + "ConnectorBitlyDiscriminatedConnectInputConnectInput", + "ConnectorBlackbaudDiscriminatedConnectInput", + "ConnectorBlackbaudDiscriminatedConnectInputConnectInput", + "ConnectorBoldsignDiscriminatedConnectInput", + "ConnectorBoldsignDiscriminatedConnectInputConnectInput", + "ConnectorBoxDiscriminatedConnectInput", + "ConnectorBoxDiscriminatedConnectInputConnectInput", + "ConnectorBraintreeDiscriminatedConnectInput", + "ConnectorBraintreeDiscriminatedConnectInputConnectInput", + "ConnectorCalendlyDiscriminatedConnectInput", + "ConnectorCalendlyDiscriminatedConnectInputConnectInput", + "ConnectorClickupDiscriminatedConnectInput", + "ConnectorClickupDiscriminatedConnectInputConnectInput", + "ConnectorCloseDiscriminatedConnectInput", + "ConnectorCloseDiscriminatedConnectInputConnectInput", + "ConnectorConfluenceDiscriminatedConnectInput", + "ConnectorConfluenceDiscriminatedConnectInputConnectInput", + "ConnectorContentfulDiscriminatedConnectInput", + "ConnectorContentfulDiscriminatedConnectInputConnectInput", + "ConnectorContentstackDiscriminatedConnectInput", + "ConnectorContentstackDiscriminatedConnectInputConnectInput", + "ConnectorCopperDiscriminatedConnectInput", + "ConnectorCopperDiscriminatedConnectInputConnectInput", + "ConnectorCorosDiscriminatedConnectInput", + "ConnectorCorosDiscriminatedConnectInputConnectInput", + "ConnectorDatevDiscriminatedConnectInput", + "ConnectorDatevDiscriminatedConnectInputConnectInput", + "ConnectorDeelDiscriminatedConnectInput", + "ConnectorDeelDiscriminatedConnectInputConnectInput", + "ConnectorDialpadDiscriminatedConnectInput", + "ConnectorDialpadDiscriminatedConnectInputConnectInput", + "ConnectorDigitaloceanDiscriminatedConnectInput", + "ConnectorDigitaloceanDiscriminatedConnectInputConnectInput", + "ConnectorDiscordDiscriminatedConnectInput", + "ConnectorDiscordDiscriminatedConnectInputConnectInput", + "ConnectorDocusignDiscriminatedConnectInput", + "ConnectorDocusignDiscriminatedConnectInputConnectInput", + "ConnectorDropboxDiscriminatedConnectInput", + "ConnectorDropboxDiscriminatedConnectInputConnectInput", + "ConnectorEbayDiscriminatedConnectInput", + "ConnectorEbayDiscriminatedConnectInputConnectInput", + "ConnectorEgnyteDiscriminatedConnectInput", + "ConnectorEgnyteDiscriminatedConnectInputConnectInput", + "ConnectorEnvoyDiscriminatedConnectInput", + "ConnectorEnvoyDiscriminatedConnectInputConnectInput", + "ConnectorEventbriteDiscriminatedConnectInput", + "ConnectorEventbriteDiscriminatedConnectInputConnectInput", + "ConnectorExistDiscriminatedConnectInput", + "ConnectorExistDiscriminatedConnectInputConnectInput", + "ConnectorFacebookDiscriminatedConnectInput", + "ConnectorFacebookDiscriminatedConnectInputConnectInput", + "ConnectorFactorialDiscriminatedConnectInput", + "ConnectorFactorialDiscriminatedConnectInputConnectInput", + "ConnectorFigmaDiscriminatedConnectInput", + "ConnectorFigmaDiscriminatedConnectInputConnectInput", + "ConnectorFitbitDiscriminatedConnectInput", + "ConnectorFitbitDiscriminatedConnectInputConnectInput", + "ConnectorFortnoxDiscriminatedConnectInput", + "ConnectorFortnoxDiscriminatedConnectInputConnectInput", + "ConnectorFreshbooksDiscriminatedConnectInput", + "ConnectorFreshbooksDiscriminatedConnectInputConnectInput", + "ConnectorFrontDiscriminatedConnectInput", + "ConnectorFrontDiscriminatedConnectInputConnectInput", + "ConnectorGitHubDiscriminatedConnectInput", + "ConnectorGitHubDiscriminatedConnectInputConnectInput", + "ConnectorGitlabDiscriminatedConnectInput", + "ConnectorGitlabDiscriminatedConnectInputConnectInput", + "ConnectorGongDiscriminatedConnectInput", + "ConnectorGongDiscriminatedConnectInputConnectInput", + "ConnectorGoogleCalendarDiscriminatedConnectInput", + "ConnectorGoogleCalendarDiscriminatedConnectInputConnectInput", + "ConnectorGoogleDocsDiscriminatedConnectInput", + "ConnectorGoogleDocsDiscriminatedConnectInputConnectInput", + "ConnectorGoogleDriveDiscriminatedConnectInput", + "ConnectorGoogleDriveDiscriminatedConnectInputConnectInput", + "ConnectorGoogleMailDiscriminatedConnectInput", + "ConnectorGoogleMailDiscriminatedConnectInputConnectInput", + "ConnectorGoogleSheetDiscriminatedConnectInput", + "ConnectorGoogleSheetDiscriminatedConnectInputConnectInput", + "ConnectorGorgiasDiscriminatedConnectInput", + "ConnectorGorgiasDiscriminatedConnectInputConnectInput", + "ConnectorGrainDiscriminatedConnectInput", + "ConnectorGrainDiscriminatedConnectInputConnectInput", + "ConnectorGumroadDiscriminatedConnectInput", + "ConnectorGumroadDiscriminatedConnectInputConnectInput", + "ConnectorGustoDiscriminatedConnectInput", + "ConnectorGustoDiscriminatedConnectInputConnectInput", + "ConnectorHarvestDiscriminatedConnectInput", + "ConnectorHarvestDiscriminatedConnectInputConnectInput", + "ConnectorHighlevelDiscriminatedConnectInput", + "ConnectorHighlevelDiscriminatedConnectInputConnectInput", + "ConnectorHubspotDiscriminatedConnectInput", + "ConnectorHubspotDiscriminatedConnectInputConnectInput", + "ConnectorInstagramDiscriminatedConnectInput", + "ConnectorInstagramDiscriminatedConnectInputConnectInput", + "ConnectorIntercomDiscriminatedConnectInput", + "ConnectorIntercomDiscriminatedConnectInputConnectInput", + "ConnectorJiraDiscriminatedConnectInput", + "ConnectorJiraDiscriminatedConnectInputConnectInput", + "ConnectorKeapDiscriminatedConnectInput", + "ConnectorKeapDiscriminatedConnectInputConnectInput", + "ConnectorLeverDiscriminatedConnectInput", + "ConnectorLeverDiscriminatedConnectInputConnectInput", + "ConnectorLinearDiscriminatedConnectInput", + "ConnectorLinearDiscriminatedConnectInputConnectInput", + "ConnectorLinkedinDiscriminatedConnectInput", + "ConnectorLinkedinDiscriminatedConnectInputConnectInput", + "ConnectorLinkhutDiscriminatedConnectInput", + "ConnectorLinkhutDiscriminatedConnectInputConnectInput", + "ConnectorMailchimpDiscriminatedConnectInput", + "ConnectorMailchimpDiscriminatedConnectInputConnectInput", + "ConnectorMiroDiscriminatedConnectInput", + "ConnectorMiroDiscriminatedConnectInputConnectInput", + "ConnectorMondayDiscriminatedConnectInput", + "ConnectorMondayDiscriminatedConnectInputConnectInput", + "ConnectorMuralDiscriminatedConnectInput", + "ConnectorMuralDiscriminatedConnectInputConnectInput", + "ConnectorNamelyDiscriminatedConnectInput", + "ConnectorNamelyDiscriminatedConnectInputConnectInput", + "ConnectorNationbuilderDiscriminatedConnectInput", + "ConnectorNationbuilderDiscriminatedConnectInputConnectInput", + "ConnectorNetsuiteDiscriminatedConnectInput", + "ConnectorNetsuiteDiscriminatedConnectInputConnectInput", + "ConnectorNotionDiscriminatedConnectInput", + "ConnectorNotionDiscriminatedConnectInputConnectInput", + "ConnectorOdooDiscriminatedConnectInput", + "ConnectorOdooDiscriminatedConnectInputConnectInput", + "ConnectorOktaDiscriminatedConnectInput", + "ConnectorOktaDiscriminatedConnectInputConnectInput", + "ConnectorOsuDiscriminatedConnectInput", + "ConnectorOsuDiscriminatedConnectInputConnectInput", + "ConnectorOuraDiscriminatedConnectInput", + "ConnectorOuraDiscriminatedConnectInputConnectInput", + "ConnectorOutreachDiscriminatedConnectInput", + "ConnectorOutreachDiscriminatedConnectInputConnectInput", + "ConnectorPagerdutyDiscriminatedConnectInput", + "ConnectorPagerdutyDiscriminatedConnectInputConnectInput", + "ConnectorPandadocDiscriminatedConnectInput", + "ConnectorPandadocDiscriminatedConnectInputConnectInput", + "ConnectorPayfitDiscriminatedConnectInput", + "ConnectorPayfitDiscriminatedConnectInputConnectInput", + "ConnectorPaypalDiscriminatedConnectInput", + "ConnectorPaypalDiscriminatedConnectInputConnectInput", + "ConnectorPennylaneDiscriminatedConnectInput", + "ConnectorPennylaneDiscriminatedConnectInputConnectInput", + "ConnectorPinterestDiscriminatedConnectInput", + "ConnectorPinterestDiscriminatedConnectInputConnectInput", + "ConnectorPipedriveDiscriminatedConnectInput", + "ConnectorPipedriveDiscriminatedConnectInputConnectInput", + "ConnectorPodiumDiscriminatedConnectInput", + "ConnectorPodiumDiscriminatedConnectInputConnectInput", + "ConnectorProductboardDiscriminatedConnectInput", + "ConnectorProductboardDiscriminatedConnectInputConnectInput", + "ConnectorQualtricsDiscriminatedConnectInput", + "ConnectorQualtricsDiscriminatedConnectInputConnectInput", + "ConnectorQuickbooksDiscriminatedConnectInput", + "ConnectorQuickbooksDiscriminatedConnectInputConnectInput", + "ConnectorRedditDiscriminatedConnectInput", + "ConnectorRedditDiscriminatedConnectInputConnectInput", + "ConnectorSageDiscriminatedConnectInput", + "ConnectorSageDiscriminatedConnectInputConnectInput", + "ConnectorSalesforceDiscriminatedConnectInput", + "ConnectorSalesforceDiscriminatedConnectInputConnectInput", + "ConnectorSalesloftDiscriminatedConnectInput", + "ConnectorSalesloftDiscriminatedConnectInputConnectInput", + "ConnectorSegmentDiscriminatedConnectInput", + "ConnectorSegmentDiscriminatedConnectInputConnectInput", + "ConnectorServicem8DiscriminatedConnectInput", + "ConnectorServicem8DiscriminatedConnectInputConnectInput", + "ConnectorServicenowDiscriminatedConnectInput", + "ConnectorServicenowDiscriminatedConnectInputConnectInput", + "ConnectorSharepointDiscriminatedConnectInput", + "ConnectorSharepointDiscriminatedConnectInputConnectInput", + "ConnectorShopifyDiscriminatedConnectInput", + "ConnectorShopifyDiscriminatedConnectInputConnectInput", + "ConnectorSignnowDiscriminatedConnectInput", + "ConnectorSignnowDiscriminatedConnectInputConnectInput", + "ConnectorSlackDiscriminatedConnectInput", + "ConnectorSlackDiscriminatedConnectInputConnectInput", + "ConnectorSmartsheetDiscriminatedConnectInput", + "ConnectorSmartsheetDiscriminatedConnectInputConnectInput", + "ConnectorSnowflakeDiscriminatedConnectInput", + "ConnectorSnowflakeDiscriminatedConnectInputConnectInput", + "ConnectorSpotifyDiscriminatedConnectInput", + "ConnectorSpotifyDiscriminatedConnectInputConnectInput", + "ConnectorSquarespaceDiscriminatedConnectInput", + "ConnectorSquarespaceDiscriminatedConnectInputConnectInput", + "ConnectorSquareupDiscriminatedConnectInput", + "ConnectorSquareupDiscriminatedConnectInputConnectInput", + "ConnectorStackexchangeDiscriminatedConnectInput", + "ConnectorStackexchangeDiscriminatedConnectInputConnectInput", + "ConnectorStravaDiscriminatedConnectInput", + "ConnectorStravaDiscriminatedConnectInputConnectInput", + "ConnectorTeamworkDiscriminatedConnectInput", + "ConnectorTeamworkDiscriminatedConnectInputConnectInput", + "ConnectorTicktickDiscriminatedConnectInput", + "ConnectorTicktickDiscriminatedConnectInputConnectInput", + "ConnectorTimelyDiscriminatedConnectInput", + "ConnectorTimelyDiscriminatedConnectInputConnectInput", + "ConnectorTodoistDiscriminatedConnectInput", + "ConnectorTodoistDiscriminatedConnectInputConnectInput", + "ConnectorTremendousDiscriminatedConnectInput", + "ConnectorTremendousDiscriminatedConnectInputConnectInput", + "ConnectorTsheetsteamDiscriminatedConnectInput", + "ConnectorTsheetsteamDiscriminatedConnectInputConnectInput", + "ConnectorTumblrDiscriminatedConnectInput", + "ConnectorTumblrDiscriminatedConnectInputConnectInput", + "ConnectorTwinfieldDiscriminatedConnectInput", + "ConnectorTwinfieldDiscriminatedConnectInputConnectInput", + "ConnectorTwitchDiscriminatedConnectInput", + "ConnectorTwitchDiscriminatedConnectInputConnectInput", + "ConnectorTwitterDiscriminatedConnectInput", + "ConnectorTwitterDiscriminatedConnectInputConnectInput", + "ConnectorTypeformDiscriminatedConnectInput", + "ConnectorTypeformDiscriminatedConnectInputConnectInput", + "ConnectorUberDiscriminatedConnectInput", + "ConnectorUberDiscriminatedConnectInputConnectInput", + "ConnectorVimeoDiscriminatedConnectInput", + "ConnectorVimeoDiscriminatedConnectInputConnectInput", + "ConnectorWakatimeDiscriminatedConnectInput", + "ConnectorWakatimeDiscriminatedConnectInputConnectInput", + "ConnectorWealthboxDiscriminatedConnectInput", + "ConnectorWealthboxDiscriminatedConnectInputConnectInput", + "ConnectorWebflowDiscriminatedConnectInput", + "ConnectorWebflowDiscriminatedConnectInputConnectInput", + "ConnectorWhoopDiscriminatedConnectInput", + "ConnectorWhoopDiscriminatedConnectInputConnectInput", + "ConnectorWordpressDiscriminatedConnectInput", + "ConnectorWordpressDiscriminatedConnectInputConnectInput", + "ConnectorWrikeDiscriminatedConnectInput", + "ConnectorWrikeDiscriminatedConnectInputConnectInput", + "ConnectorXeroDiscriminatedConnectInput", + "ConnectorXeroDiscriminatedConnectInputConnectInput", + "ConnectorYahooDiscriminatedConnectInput", + "ConnectorYahooDiscriminatedConnectInputConnectInput", + "ConnectorYandexDiscriminatedConnectInput", + "ConnectorYandexDiscriminatedConnectInputConnectInput", + "ConnectorZapierDiscriminatedConnectInput", + "ConnectorZapierDiscriminatedConnectInputConnectInput", + "ConnectorZendeskDiscriminatedConnectInput", + "ConnectorZendeskDiscriminatedConnectInputConnectInput", + "ConnectorZenefitsDiscriminatedConnectInput", + "ConnectorZenefitsDiscriminatedConnectInputConnectInput", + "ConnectorZohoDeskDiscriminatedConnectInput", + "ConnectorZohoDeskDiscriminatedConnectInputConnectInput", + "ConnectorZohoDiscriminatedConnectInput", + "ConnectorZohoDiscriminatedConnectInputConnectInput", + "ConnectorZoomDiscriminatedConnectInput", + "ConnectorZoomDiscriminatedConnectInputConnectInput", + "ConnectorAirtableDiscriminatedConnectInput", + "ConnectorApolloDiscriminatedConnectInput", + "ConnectorBrexDiscriminatedConnectInput", + "ConnectorCodaDiscriminatedConnectInput", + "ConnectorFinchDiscriminatedConnectInput", + "ConnectorFinchDiscriminatedConnectInputConnectInput", + "ConnectorFirebaseDiscriminatedConnectInput", + "ConnectorForeceiptDiscriminatedConnectInput", + "ConnectorForeceiptDiscriminatedConnectInputConnectInput", + "ConnectorGreenhouseDiscriminatedConnectInput", + "ConnectorHeronDiscriminatedConnectInput", + "ConnectorLunchmoneyDiscriminatedConnectInput", + "ConnectorMercuryDiscriminatedConnectInput", + "ConnectorMergeDiscriminatedConnectInput", + "ConnectorMergeDiscriminatedConnectInputConnectInput", + "ConnectorMootaDiscriminatedConnectInput", + "ConnectorOnebrickDiscriminatedConnectInput", + "ConnectorOnebrickDiscriminatedConnectInputConnectInput", + "ConnectorOpenledgerDiscriminatedConnectInput", + "ConnectorPlaidDiscriminatedConnectInput", + "ConnectorPlaidDiscriminatedConnectInputConnectInput", + "ConnectorPlaidDiscriminatedConnectInputConnectInputLinkToken", + "ConnectorPlaidDiscriminatedConnectInputConnectInputPublicToken", + "ConnectorPostgresDiscriminatedConnectInput", + "ConnectorRampDiscriminatedConnectInput", + "ConnectorRampDiscriminatedConnectInputConnectInput", + "ConnectorSaltedgeDiscriminatedConnectInput", + "ConnectorSharepointOnpremDiscriminatedConnectInput", + "ConnectorSlackAgentDiscriminatedConnectInput", + "ConnectorSlackAgentDiscriminatedConnectInputConnectInput", + "ConnectorSplitwiseDiscriminatedConnectInput", + "ConnectorStripeDiscriminatedConnectInput", + "ConnectorTellerDiscriminatedConnectInput", + "ConnectorTellerDiscriminatedConnectInputConnectInput", + "ConnectorTogglDiscriminatedConnectInput", + "ConnectorTogglDiscriminatedConnectInputConnectInput", + "ConnectorTwentyDiscriminatedConnectInput", + "ConnectorVenmoDiscriminatedConnectInput", + "ConnectorWiseDiscriminatedConnectInput", + "ConnectorWiseDiscriminatedConnectInputConnectInput", + "ConnectorYodleeDiscriminatedConnectInput", + "ConnectorYodleeDiscriminatedConnectInputConnectInput", + "ConnectorYodleeDiscriminatedConnectInputConnectInputAccessToken", +] + + +class ConnectorAcceloDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAcceloDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAcceloDiscriminatedConnectInputConnectInput + + connector_name: Literal["accelo"] + + +class ConnectorAcmeApikeyDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["acme-apikey"] + + +class ConnectorAcmeOauth2DiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAcmeOauth2DiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAcmeOauth2DiscriminatedConnectInputConnectInput + + connector_name: Literal["acme-oauth2"] + + +class ConnectorAdobeDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAdobeDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAdobeDiscriminatedConnectInputConnectInput + + connector_name: Literal["adobe"] + + +class ConnectorAdyenDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAdyenDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAdyenDiscriminatedConnectInputConnectInput + + connector_name: Literal["adyen"] + + +class ConnectorAircallDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAircallDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAircallDiscriminatedConnectInputConnectInput + + connector_name: Literal["aircall"] + + +class ConnectorAmazonDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAmazonDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAmazonDiscriminatedConnectInputConnectInput + + connector_name: Literal["amazon"] + + +class ConnectorApaleoDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorApaleoDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorApaleoDiscriminatedConnectInputConnectInput + + connector_name: Literal["apaleo"] + + +class ConnectorAsanaDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAsanaDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAsanaDiscriminatedConnectInputConnectInput + + connector_name: Literal["asana"] + + +class ConnectorAttioDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAttioDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAttioDiscriminatedConnectInputConnectInput + + connector_name: Literal["attio"] + + +class ConnectorAuth0DiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAuth0DiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAuth0DiscriminatedConnectInputConnectInput + + connector_name: Literal["auth0"] + + +class ConnectorAutodeskDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAutodeskDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAutodeskDiscriminatedConnectInputConnectInput + + connector_name: Literal["autodesk"] + + +class ConnectorAwsDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorAwsDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorAwsDiscriminatedConnectInputConnectInput + + connector_name: Literal["aws"] + + +class ConnectorBamboohrDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBamboohrDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBamboohrDiscriminatedConnectInputConnectInput + + connector_name: Literal["bamboohr"] + + +class ConnectorBasecampDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBasecampDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBasecampDiscriminatedConnectInputConnectInput + + connector_name: Literal["basecamp"] + + +class ConnectorBattlenetDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBattlenetDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBattlenetDiscriminatedConnectInputConnectInput + + connector_name: Literal["battlenet"] + + +class ConnectorBigcommerceDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBigcommerceDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBigcommerceDiscriminatedConnectInputConnectInput + + connector_name: Literal["bigcommerce"] + + +class ConnectorBitbucketDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBitbucketDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBitbucketDiscriminatedConnectInputConnectInput + + connector_name: Literal["bitbucket"] + + +class ConnectorBitlyDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBitlyDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBitlyDiscriminatedConnectInputConnectInput + + connector_name: Literal["bitly"] + + +class ConnectorBlackbaudDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBlackbaudDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBlackbaudDiscriminatedConnectInputConnectInput + + connector_name: Literal["blackbaud"] + + +class ConnectorBoldsignDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBoldsignDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBoldsignDiscriminatedConnectInputConnectInput + + connector_name: Literal["boldsign"] + + +class ConnectorBoxDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBoxDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBoxDiscriminatedConnectInputConnectInput + + connector_name: Literal["box"] + + +class ConnectorBraintreeDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorBraintreeDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorBraintreeDiscriminatedConnectInputConnectInput + + connector_name: Literal["braintree"] + + +class ConnectorCalendlyDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorCalendlyDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorCalendlyDiscriminatedConnectInputConnectInput + + connector_name: Literal["calendly"] + + +class ConnectorClickupDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorClickupDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorClickupDiscriminatedConnectInputConnectInput + + connector_name: Literal["clickup"] + + +class ConnectorCloseDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorCloseDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorCloseDiscriminatedConnectInputConnectInput + + connector_name: Literal["close"] + + +class ConnectorConfluenceDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorConfluenceDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorConfluenceDiscriminatedConnectInputConnectInput + + connector_name: Literal["confluence"] + + +class ConnectorContentfulDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorContentfulDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorContentfulDiscriminatedConnectInputConnectInput + + connector_name: Literal["contentful"] + + +class ConnectorContentstackDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorContentstackDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorContentstackDiscriminatedConnectInputConnectInput + + connector_name: Literal["contentstack"] + + +class ConnectorCopperDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorCopperDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorCopperDiscriminatedConnectInputConnectInput + + connector_name: Literal["copper"] + + +class ConnectorCorosDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorCorosDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorCorosDiscriminatedConnectInputConnectInput + + connector_name: Literal["coros"] + + +class ConnectorDatevDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorDatevDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorDatevDiscriminatedConnectInputConnectInput + + connector_name: Literal["datev"] + + +class ConnectorDeelDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorDeelDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorDeelDiscriminatedConnectInputConnectInput + + connector_name: Literal["deel"] + + +class ConnectorDialpadDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorDialpadDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorDialpadDiscriminatedConnectInputConnectInput + + connector_name: Literal["dialpad"] + + +class ConnectorDigitaloceanDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorDigitaloceanDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorDigitaloceanDiscriminatedConnectInputConnectInput + + connector_name: Literal["digitalocean"] + + +class ConnectorDiscordDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorDiscordDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorDiscordDiscriminatedConnectInputConnectInput + + connector_name: Literal["discord"] + + +class ConnectorDocusignDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorDocusignDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorDocusignDiscriminatedConnectInputConnectInput + + connector_name: Literal["docusign"] + + +class ConnectorDropboxDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorDropboxDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorDropboxDiscriminatedConnectInputConnectInput + + connector_name: Literal["dropbox"] + + +class ConnectorEbayDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorEbayDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorEbayDiscriminatedConnectInputConnectInput + + connector_name: Literal["ebay"] + + +class ConnectorEgnyteDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorEgnyteDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorEgnyteDiscriminatedConnectInputConnectInput + + connector_name: Literal["egnyte"] + + +class ConnectorEnvoyDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorEnvoyDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorEnvoyDiscriminatedConnectInputConnectInput + + connector_name: Literal["envoy"] + + +class ConnectorEventbriteDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorEventbriteDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorEventbriteDiscriminatedConnectInputConnectInput + + connector_name: Literal["eventbrite"] + + +class ConnectorExistDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorExistDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorExistDiscriminatedConnectInputConnectInput + + connector_name: Literal["exist"] + + +class ConnectorFacebookDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorFacebookDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorFacebookDiscriminatedConnectInputConnectInput + + connector_name: Literal["facebook"] + + +class ConnectorFactorialDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorFactorialDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorFactorialDiscriminatedConnectInputConnectInput + + connector_name: Literal["factorial"] + + +class ConnectorFigmaDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorFigmaDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorFigmaDiscriminatedConnectInputConnectInput + + connector_name: Literal["figma"] + + +class ConnectorFitbitDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorFitbitDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorFitbitDiscriminatedConnectInputConnectInput + + connector_name: Literal["fitbit"] + + +class ConnectorFortnoxDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorFortnoxDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorFortnoxDiscriminatedConnectInputConnectInput + + connector_name: Literal["fortnox"] + + +class ConnectorFreshbooksDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorFreshbooksDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorFreshbooksDiscriminatedConnectInputConnectInput + + connector_name: Literal["freshbooks"] + + +class ConnectorFrontDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorFrontDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorFrontDiscriminatedConnectInputConnectInput + + connector_name: Literal["front"] + + +class ConnectorGitHubDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGitHubDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGitHubDiscriminatedConnectInputConnectInput + + connector_name: Literal["github"] + + +class ConnectorGitlabDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGitlabDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGitlabDiscriminatedConnectInputConnectInput + + connector_name: Literal["gitlab"] + + +class ConnectorGongDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGongDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGongDiscriminatedConnectInputConnectInput + + connector_name: Literal["gong"] + + +class ConnectorGoogleCalendarDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGoogleCalendarDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGoogleCalendarDiscriminatedConnectInputConnectInput + + connector_name: Literal["google-calendar"] + + +class ConnectorGoogleDocsDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGoogleDocsDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGoogleDocsDiscriminatedConnectInputConnectInput + + connector_name: Literal["google-docs"] + + +class ConnectorGoogleDriveDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGoogleDriveDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGoogleDriveDiscriminatedConnectInputConnectInput + + connector_name: Literal["google-drive"] + + +class ConnectorGoogleMailDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGoogleMailDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGoogleMailDiscriminatedConnectInputConnectInput + + connector_name: Literal["google-mail"] + + +class ConnectorGoogleSheetDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGoogleSheetDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGoogleSheetDiscriminatedConnectInputConnectInput + + connector_name: Literal["google-sheet"] + + +class ConnectorGorgiasDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGorgiasDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGorgiasDiscriminatedConnectInputConnectInput + + connector_name: Literal["gorgias"] + + +class ConnectorGrainDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGrainDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGrainDiscriminatedConnectInputConnectInput + + connector_name: Literal["grain"] + + +class ConnectorGumroadDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGumroadDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGumroadDiscriminatedConnectInputConnectInput + + connector_name: Literal["gumroad"] + + +class ConnectorGustoDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorGustoDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorGustoDiscriminatedConnectInputConnectInput + + connector_name: Literal["gusto"] + + +class ConnectorHarvestDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorHarvestDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorHarvestDiscriminatedConnectInputConnectInput + + connector_name: Literal["harvest"] + + +class ConnectorHighlevelDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorHighlevelDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorHighlevelDiscriminatedConnectInputConnectInput + + connector_name: Literal["highlevel"] + + +class ConnectorHubspotDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorHubspotDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorHubspotDiscriminatedConnectInputConnectInput + + connector_name: Literal["hubspot"] + + +class ConnectorInstagramDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorInstagramDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorInstagramDiscriminatedConnectInputConnectInput + + connector_name: Literal["instagram"] + + +class ConnectorIntercomDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorIntercomDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorIntercomDiscriminatedConnectInputConnectInput + + connector_name: Literal["intercom"] + + +class ConnectorJiraDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorJiraDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorJiraDiscriminatedConnectInputConnectInput + + connector_name: Literal["jira"] + + +class ConnectorKeapDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorKeapDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorKeapDiscriminatedConnectInputConnectInput + + connector_name: Literal["keap"] + + +class ConnectorLeverDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorLeverDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorLeverDiscriminatedConnectInputConnectInput + + connector_name: Literal["lever"] + + +class ConnectorLinearDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorLinearDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorLinearDiscriminatedConnectInputConnectInput + + connector_name: Literal["linear"] + + +class ConnectorLinkedinDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorLinkedinDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorLinkedinDiscriminatedConnectInputConnectInput + + connector_name: Literal["linkedin"] + + +class ConnectorLinkhutDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorLinkhutDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorLinkhutDiscriminatedConnectInputConnectInput + + connector_name: Literal["linkhut"] + + +class ConnectorMailchimpDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorMailchimpDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorMailchimpDiscriminatedConnectInputConnectInput + + connector_name: Literal["mailchimp"] + + +class ConnectorMiroDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorMiroDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorMiroDiscriminatedConnectInputConnectInput + + connector_name: Literal["miro"] + + +class ConnectorMondayDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorMondayDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorMondayDiscriminatedConnectInputConnectInput + + connector_name: Literal["monday"] + + +class ConnectorMuralDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorMuralDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorMuralDiscriminatedConnectInputConnectInput + + connector_name: Literal["mural"] + + +class ConnectorNamelyDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorNamelyDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorNamelyDiscriminatedConnectInputConnectInput + + connector_name: Literal["namely"] + + +class ConnectorNationbuilderDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorNationbuilderDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorNationbuilderDiscriminatedConnectInputConnectInput + + connector_name: Literal["nationbuilder"] + + +class ConnectorNetsuiteDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorNetsuiteDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorNetsuiteDiscriminatedConnectInputConnectInput + + connector_name: Literal["netsuite"] + + +class ConnectorNotionDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorNotionDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorNotionDiscriminatedConnectInputConnectInput + + connector_name: Literal["notion"] + + +class ConnectorOdooDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorOdooDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorOdooDiscriminatedConnectInputConnectInput + + connector_name: Literal["odoo"] + + +class ConnectorOktaDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorOktaDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorOktaDiscriminatedConnectInputConnectInput + + connector_name: Literal["okta"] + + +class ConnectorOsuDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorOsuDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorOsuDiscriminatedConnectInputConnectInput + + connector_name: Literal["osu"] + + +class ConnectorOuraDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorOuraDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorOuraDiscriminatedConnectInputConnectInput + + connector_name: Literal["oura"] + + +class ConnectorOutreachDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorOutreachDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorOutreachDiscriminatedConnectInputConnectInput + + connector_name: Literal["outreach"] + + +class ConnectorPagerdutyDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorPagerdutyDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPagerdutyDiscriminatedConnectInputConnectInput + + connector_name: Literal["pagerduty"] + + +class ConnectorPandadocDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorPandadocDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPandadocDiscriminatedConnectInputConnectInput + + connector_name: Literal["pandadoc"] + + +class ConnectorPayfitDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorPayfitDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPayfitDiscriminatedConnectInputConnectInput + + connector_name: Literal["payfit"] + + +class ConnectorPaypalDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorPaypalDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPaypalDiscriminatedConnectInputConnectInput + + connector_name: Literal["paypal"] + + +class ConnectorPennylaneDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorPennylaneDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPennylaneDiscriminatedConnectInputConnectInput + + connector_name: Literal["pennylane"] + + +class ConnectorPinterestDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorPinterestDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPinterestDiscriminatedConnectInputConnectInput + + connector_name: Literal["pinterest"] + + +class ConnectorPipedriveDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorPipedriveDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPipedriveDiscriminatedConnectInputConnectInput + + connector_name: Literal["pipedrive"] + + +class ConnectorPodiumDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorPodiumDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPodiumDiscriminatedConnectInputConnectInput + + connector_name: Literal["podium"] + + +class ConnectorProductboardDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorProductboardDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorProductboardDiscriminatedConnectInputConnectInput + + connector_name: Literal["productboard"] + + +class ConnectorQualtricsDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorQualtricsDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorQualtricsDiscriminatedConnectInputConnectInput + + connector_name: Literal["qualtrics"] + + +class ConnectorQuickbooksDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorQuickbooksDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorQuickbooksDiscriminatedConnectInputConnectInput + + connector_name: Literal["quickbooks"] + + +class ConnectorRedditDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorRedditDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorRedditDiscriminatedConnectInputConnectInput + + connector_name: Literal["reddit"] + + +class ConnectorSageDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSageDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSageDiscriminatedConnectInputConnectInput + + connector_name: Literal["sage"] + + +class ConnectorSalesforceDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSalesforceDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSalesforceDiscriminatedConnectInputConnectInput + + connector_name: Literal["salesforce"] + + +class ConnectorSalesloftDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSalesloftDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSalesloftDiscriminatedConnectInputConnectInput + + connector_name: Literal["salesloft"] + + +class ConnectorSegmentDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSegmentDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSegmentDiscriminatedConnectInputConnectInput + + connector_name: Literal["segment"] + + +class ConnectorServicem8DiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorServicem8DiscriminatedConnectInput(BaseModel): + connect_input: ConnectorServicem8DiscriminatedConnectInputConnectInput + + connector_name: Literal["servicem8"] + + +class ConnectorServicenowDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorServicenowDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorServicenowDiscriminatedConnectInputConnectInput + + connector_name: Literal["servicenow"] + + +class ConnectorSharepointDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSharepointDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSharepointDiscriminatedConnectInputConnectInput + + connector_name: Literal["sharepoint"] + + +class ConnectorShopifyDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorShopifyDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorShopifyDiscriminatedConnectInputConnectInput + + connector_name: Literal["shopify"] + + +class ConnectorSignnowDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSignnowDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSignnowDiscriminatedConnectInputConnectInput + + connector_name: Literal["signnow"] + + +class ConnectorSlackDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSlackDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSlackDiscriminatedConnectInputConnectInput + + connector_name: Literal["slack"] + + +class ConnectorSmartsheetDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSmartsheetDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSmartsheetDiscriminatedConnectInputConnectInput + + connector_name: Literal["smartsheet"] + + +class ConnectorSnowflakeDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSnowflakeDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSnowflakeDiscriminatedConnectInputConnectInput + + connector_name: Literal["snowflake"] + + +class ConnectorSpotifyDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSpotifyDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSpotifyDiscriminatedConnectInputConnectInput + + connector_name: Literal["spotify"] + + +class ConnectorSquarespaceDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSquarespaceDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSquarespaceDiscriminatedConnectInputConnectInput + + connector_name: Literal["squarespace"] + + +class ConnectorSquareupDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorSquareupDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSquareupDiscriminatedConnectInputConnectInput + + connector_name: Literal["squareup"] + + +class ConnectorStackexchangeDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorStackexchangeDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorStackexchangeDiscriminatedConnectInputConnectInput + + connector_name: Literal["stackexchange"] + + +class ConnectorStravaDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorStravaDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorStravaDiscriminatedConnectInputConnectInput + + connector_name: Literal["strava"] + + +class ConnectorTeamworkDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTeamworkDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTeamworkDiscriminatedConnectInputConnectInput + + connector_name: Literal["teamwork"] + + +class ConnectorTicktickDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTicktickDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTicktickDiscriminatedConnectInputConnectInput + + connector_name: Literal["ticktick"] + + +class ConnectorTimelyDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTimelyDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTimelyDiscriminatedConnectInputConnectInput + + connector_name: Literal["timely"] + + +class ConnectorTodoistDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTodoistDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTodoistDiscriminatedConnectInputConnectInput + + connector_name: Literal["todoist"] + + +class ConnectorTremendousDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTremendousDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTremendousDiscriminatedConnectInputConnectInput + + connector_name: Literal["tremendous"] + + +class ConnectorTsheetsteamDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTsheetsteamDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTsheetsteamDiscriminatedConnectInputConnectInput + + connector_name: Literal["tsheetsteam"] + + +class ConnectorTumblrDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTumblrDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTumblrDiscriminatedConnectInputConnectInput + + connector_name: Literal["tumblr"] + + +class ConnectorTwinfieldDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTwinfieldDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTwinfieldDiscriminatedConnectInputConnectInput + + connector_name: Literal["twinfield"] + + +class ConnectorTwitchDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTwitchDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTwitchDiscriminatedConnectInputConnectInput + + connector_name: Literal["twitch"] + + +class ConnectorTwitterDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTwitterDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTwitterDiscriminatedConnectInputConnectInput + + connector_name: Literal["twitter"] + + +class ConnectorTypeformDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorTypeformDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTypeformDiscriminatedConnectInputConnectInput + + connector_name: Literal["typeform"] + + +class ConnectorUberDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorUberDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorUberDiscriminatedConnectInputConnectInput + + connector_name: Literal["uber"] + + +class ConnectorVimeoDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorVimeoDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorVimeoDiscriminatedConnectInputConnectInput + + connector_name: Literal["vimeo"] + + +class ConnectorWakatimeDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorWakatimeDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorWakatimeDiscriminatedConnectInputConnectInput + + connector_name: Literal["wakatime"] + + +class ConnectorWealthboxDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorWealthboxDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorWealthboxDiscriminatedConnectInputConnectInput + + connector_name: Literal["wealthbox"] + + +class ConnectorWebflowDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorWebflowDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorWebflowDiscriminatedConnectInputConnectInput + + connector_name: Literal["webflow"] + + +class ConnectorWhoopDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorWhoopDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorWhoopDiscriminatedConnectInputConnectInput + + connector_name: Literal["whoop"] + + +class ConnectorWordpressDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorWordpressDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorWordpressDiscriminatedConnectInputConnectInput + + connector_name: Literal["wordpress"] + + +class ConnectorWrikeDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorWrikeDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorWrikeDiscriminatedConnectInputConnectInput + + connector_name: Literal["wrike"] + + +class ConnectorXeroDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorXeroDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorXeroDiscriminatedConnectInputConnectInput + + connector_name: Literal["xero"] + + +class ConnectorYahooDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorYahooDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorYahooDiscriminatedConnectInputConnectInput + + connector_name: Literal["yahoo"] + + +class ConnectorYandexDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorYandexDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorYandexDiscriminatedConnectInputConnectInput + + connector_name: Literal["yandex"] + + +class ConnectorZapierDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorZapierDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorZapierDiscriminatedConnectInputConnectInput + + connector_name: Literal["zapier"] + + +class ConnectorZendeskDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorZendeskDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorZendeskDiscriminatedConnectInputConnectInput + + connector_name: Literal["zendesk"] + + +class ConnectorZenefitsDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorZenefitsDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorZenefitsDiscriminatedConnectInputConnectInput + + connector_name: Literal["zenefits"] + + +class ConnectorZohoDeskDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorZohoDeskDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorZohoDeskDiscriminatedConnectInputConnectInput + + connector_name: Literal["zoho-desk"] + + +class ConnectorZohoDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorZohoDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorZohoDiscriminatedConnectInputConnectInput + + connector_name: Literal["zoho"] + + +class ConnectorZoomDiscriminatedConnectInputConnectInput(BaseModel): + authorization_url: str + """URL to take user to for approval""" + + code_verifier: Optional[str] = None + """Code verifier for PKCE""" + + +class ConnectorZoomDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorZoomDiscriminatedConnectInputConnectInput + + connector_name: Literal["zoom"] + + +class ConnectorAirtableDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["airtable"] + + +class ConnectorApolloDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["apollo"] + + +class ConnectorBrexDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["brex"] + + +class ConnectorCodaDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["coda"] + + +class ConnectorFinchDiscriminatedConnectInputConnectInput(BaseModel): + client_id: str + + products: List[ + Literal["company", "directory", "individual", "ssn", "employment", "payment", "pay_statement", "benefits"] + ] + + +class ConnectorFinchDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorFinchDiscriminatedConnectInputConnectInput + + connector_name: Literal["finch"] + + +class ConnectorFirebaseDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["firebase"] + + +class ConnectorForeceiptDiscriminatedConnectInputConnectInput(BaseModel): + env_name: Literal["staging", "production"] = FieldInfo(alias="envName") + + api_id: Optional[object] = FieldInfo(alias="_id", default=None) + + credentials: Optional[object] = None + + +class ConnectorForeceiptDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorForeceiptDiscriminatedConnectInputConnectInput + + connector_name: Literal["foreceipt"] + + +class ConnectorGreenhouseDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["greenhouse"] + + +class ConnectorHeronDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["heron"] + + +class ConnectorLunchmoneyDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["lunchmoney"] + + +class ConnectorMercuryDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["mercury"] + + +class ConnectorMergeDiscriminatedConnectInputConnectInput(BaseModel): + link_token: str + + +class ConnectorMergeDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorMergeDiscriminatedConnectInputConnectInput + + connector_name: Literal["merge"] + + +class ConnectorMootaDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["moota"] + + +class ConnectorOnebrickDiscriminatedConnectInputConnectInput(BaseModel): + public_token: Optional[str] = FieldInfo(alias="publicToken", default=None) + + redirect_url: Optional[str] = None + + +class ConnectorOnebrickDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorOnebrickDiscriminatedConnectInputConnectInput + + connector_name: Literal["onebrick"] + + +class ConnectorOpenledgerDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["openledger"] + + +class ConnectorPlaidDiscriminatedConnectInputConnectInputLinkToken(BaseModel): + link_token: str + + +class ConnectorPlaidDiscriminatedConnectInputConnectInputPublicToken(BaseModel): + public_token: str + + +ConnectorPlaidDiscriminatedConnectInputConnectInput: TypeAlias = Union[ + ConnectorPlaidDiscriminatedConnectInputConnectInputLinkToken, + ConnectorPlaidDiscriminatedConnectInputConnectInputPublicToken, +] + + +class ConnectorPlaidDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorPlaidDiscriminatedConnectInputConnectInput + + connector_name: Literal["plaid"] + + +class ConnectorPostgresDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["postgres"] + + +class ConnectorRampDiscriminatedConnectInputConnectInput(BaseModel): + access_token: Optional[str] = FieldInfo(alias="accessToken", default=None) + + +class ConnectorRampDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorRampDiscriminatedConnectInputConnectInput + + connector_name: Literal["ramp"] + + +class ConnectorSaltedgeDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["saltedge"] + + +class ConnectorSharepointOnpremDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["sharepoint-onprem"] + + +class ConnectorSlackAgentDiscriminatedConnectInputConnectInput(BaseModel): + configuration_url: str + """Configuration URL - https://api.slack.com/apps/A1234567890/oauth...""" + + +class ConnectorSlackAgentDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorSlackAgentDiscriminatedConnectInputConnectInput + + connector_name: Literal["slack-agent"] + + +class ConnectorSplitwiseDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["splitwise"] + + +class ConnectorStripeDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["stripe"] + + +class ConnectorTellerDiscriminatedConnectInputConnectInput(BaseModel): + application_id: str = FieldInfo(alias="applicationId") + + user_token: Optional[str] = FieldInfo(alias="userToken", default=None) + + +class ConnectorTellerDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTellerDiscriminatedConnectInputConnectInput + + connector_name: Literal["teller"] + + +class ConnectorTogglDiscriminatedConnectInputConnectInput(BaseModel): + api_token: str = FieldInfo(alias="apiToken") + + +class ConnectorTogglDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorTogglDiscriminatedConnectInputConnectInput + + connector_name: Literal["toggl"] + + +class ConnectorTwentyDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["twenty"] + + +class ConnectorVenmoDiscriminatedConnectInput(BaseModel): + connect_input: object + + connector_name: Literal["venmo"] + + +class ConnectorWiseDiscriminatedConnectInputConnectInput(BaseModel): + client_id: str = FieldInfo(alias="clientId") + + env_name: Literal["sandbox", "live"] = FieldInfo(alias="envName") + + redirect_uri: str = FieldInfo(alias="redirectUri") + + +class ConnectorWiseDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorWiseDiscriminatedConnectInputConnectInput + + connector_name: Literal["wise"] + + +class ConnectorYodleeDiscriminatedConnectInputConnectInputAccessToken(BaseModel): + access_token: str = FieldInfo(alias="accessToken") + + expires_in: float = FieldInfo(alias="expiresIn") + + issued_at: str = FieldInfo(alias="issuedAt") + + +class ConnectorYodleeDiscriminatedConnectInputConnectInput(BaseModel): + access_token: ConnectorYodleeDiscriminatedConnectInputConnectInputAccessToken = FieldInfo(alias="accessToken") + + env_name: Literal["sandbox", "development", "production"] = FieldInfo(alias="envName") + + +class ConnectorYodleeDiscriminatedConnectInput(BaseModel): + connect_input: ConnectorYodleeDiscriminatedConnectInputConnectInput + + connector_name: Literal["yodlee"] + + +PreConnectResponse: TypeAlias = Annotated[ + Union[ + ConnectorAcceloDiscriminatedConnectInput, + ConnectorAcmeApikeyDiscriminatedConnectInput, + ConnectorAcmeOauth2DiscriminatedConnectInput, + ConnectorAdobeDiscriminatedConnectInput, + ConnectorAdyenDiscriminatedConnectInput, + ConnectorAircallDiscriminatedConnectInput, + ConnectorAmazonDiscriminatedConnectInput, + ConnectorApaleoDiscriminatedConnectInput, + ConnectorAsanaDiscriminatedConnectInput, + ConnectorAttioDiscriminatedConnectInput, + ConnectorAuth0DiscriminatedConnectInput, + ConnectorAutodeskDiscriminatedConnectInput, + ConnectorAwsDiscriminatedConnectInput, + ConnectorBamboohrDiscriminatedConnectInput, + ConnectorBasecampDiscriminatedConnectInput, + ConnectorBattlenetDiscriminatedConnectInput, + ConnectorBigcommerceDiscriminatedConnectInput, + ConnectorBitbucketDiscriminatedConnectInput, + ConnectorBitlyDiscriminatedConnectInput, + ConnectorBlackbaudDiscriminatedConnectInput, + ConnectorBoldsignDiscriminatedConnectInput, + ConnectorBoxDiscriminatedConnectInput, + ConnectorBraintreeDiscriminatedConnectInput, + ConnectorCalendlyDiscriminatedConnectInput, + ConnectorClickupDiscriminatedConnectInput, + ConnectorCloseDiscriminatedConnectInput, + ConnectorConfluenceDiscriminatedConnectInput, + ConnectorContentfulDiscriminatedConnectInput, + ConnectorContentstackDiscriminatedConnectInput, + ConnectorCopperDiscriminatedConnectInput, + ConnectorCorosDiscriminatedConnectInput, + ConnectorDatevDiscriminatedConnectInput, + ConnectorDeelDiscriminatedConnectInput, + ConnectorDialpadDiscriminatedConnectInput, + ConnectorDigitaloceanDiscriminatedConnectInput, + ConnectorDiscordDiscriminatedConnectInput, + ConnectorDocusignDiscriminatedConnectInput, + ConnectorDropboxDiscriminatedConnectInput, + ConnectorEbayDiscriminatedConnectInput, + ConnectorEgnyteDiscriminatedConnectInput, + ConnectorEnvoyDiscriminatedConnectInput, + ConnectorEventbriteDiscriminatedConnectInput, + ConnectorExistDiscriminatedConnectInput, + ConnectorFacebookDiscriminatedConnectInput, + ConnectorFactorialDiscriminatedConnectInput, + ConnectorFigmaDiscriminatedConnectInput, + ConnectorFitbitDiscriminatedConnectInput, + ConnectorFortnoxDiscriminatedConnectInput, + ConnectorFreshbooksDiscriminatedConnectInput, + ConnectorFrontDiscriminatedConnectInput, + ConnectorGitHubDiscriminatedConnectInput, + ConnectorGitlabDiscriminatedConnectInput, + ConnectorGongDiscriminatedConnectInput, + ConnectorGoogleCalendarDiscriminatedConnectInput, + ConnectorGoogleDocsDiscriminatedConnectInput, + ConnectorGoogleDriveDiscriminatedConnectInput, + ConnectorGoogleMailDiscriminatedConnectInput, + ConnectorGoogleSheetDiscriminatedConnectInput, + ConnectorGorgiasDiscriminatedConnectInput, + ConnectorGrainDiscriminatedConnectInput, + ConnectorGumroadDiscriminatedConnectInput, + ConnectorGustoDiscriminatedConnectInput, + ConnectorHarvestDiscriminatedConnectInput, + ConnectorHighlevelDiscriminatedConnectInput, + ConnectorHubspotDiscriminatedConnectInput, + ConnectorInstagramDiscriminatedConnectInput, + ConnectorIntercomDiscriminatedConnectInput, + ConnectorJiraDiscriminatedConnectInput, + ConnectorKeapDiscriminatedConnectInput, + ConnectorLeverDiscriminatedConnectInput, + ConnectorLinearDiscriminatedConnectInput, + ConnectorLinkedinDiscriminatedConnectInput, + ConnectorLinkhutDiscriminatedConnectInput, + ConnectorMailchimpDiscriminatedConnectInput, + ConnectorMiroDiscriminatedConnectInput, + ConnectorMondayDiscriminatedConnectInput, + ConnectorMuralDiscriminatedConnectInput, + ConnectorNamelyDiscriminatedConnectInput, + ConnectorNationbuilderDiscriminatedConnectInput, + ConnectorNetsuiteDiscriminatedConnectInput, + ConnectorNotionDiscriminatedConnectInput, + ConnectorOdooDiscriminatedConnectInput, + ConnectorOktaDiscriminatedConnectInput, + ConnectorOsuDiscriminatedConnectInput, + ConnectorOuraDiscriminatedConnectInput, + ConnectorOutreachDiscriminatedConnectInput, + ConnectorPagerdutyDiscriminatedConnectInput, + ConnectorPandadocDiscriminatedConnectInput, + ConnectorPayfitDiscriminatedConnectInput, + ConnectorPaypalDiscriminatedConnectInput, + ConnectorPennylaneDiscriminatedConnectInput, + ConnectorPinterestDiscriminatedConnectInput, + ConnectorPipedriveDiscriminatedConnectInput, + ConnectorPodiumDiscriminatedConnectInput, + ConnectorProductboardDiscriminatedConnectInput, + ConnectorQualtricsDiscriminatedConnectInput, + ConnectorQuickbooksDiscriminatedConnectInput, + ConnectorRedditDiscriminatedConnectInput, + ConnectorSageDiscriminatedConnectInput, + ConnectorSalesforceDiscriminatedConnectInput, + ConnectorSalesloftDiscriminatedConnectInput, + ConnectorSegmentDiscriminatedConnectInput, + ConnectorServicem8DiscriminatedConnectInput, + ConnectorServicenowDiscriminatedConnectInput, + ConnectorSharepointDiscriminatedConnectInput, + ConnectorShopifyDiscriminatedConnectInput, + ConnectorSignnowDiscriminatedConnectInput, + ConnectorSlackDiscriminatedConnectInput, + ConnectorSmartsheetDiscriminatedConnectInput, + ConnectorSnowflakeDiscriminatedConnectInput, + ConnectorSpotifyDiscriminatedConnectInput, + ConnectorSquarespaceDiscriminatedConnectInput, + ConnectorSquareupDiscriminatedConnectInput, + ConnectorStackexchangeDiscriminatedConnectInput, + ConnectorStravaDiscriminatedConnectInput, + ConnectorTeamworkDiscriminatedConnectInput, + ConnectorTicktickDiscriminatedConnectInput, + ConnectorTimelyDiscriminatedConnectInput, + ConnectorTodoistDiscriminatedConnectInput, + ConnectorTremendousDiscriminatedConnectInput, + ConnectorTsheetsteamDiscriminatedConnectInput, + ConnectorTumblrDiscriminatedConnectInput, + ConnectorTwinfieldDiscriminatedConnectInput, + ConnectorTwitchDiscriminatedConnectInput, + ConnectorTwitterDiscriminatedConnectInput, + ConnectorTypeformDiscriminatedConnectInput, + ConnectorUberDiscriminatedConnectInput, + ConnectorVimeoDiscriminatedConnectInput, + ConnectorWakatimeDiscriminatedConnectInput, + ConnectorWealthboxDiscriminatedConnectInput, + ConnectorWebflowDiscriminatedConnectInput, + ConnectorWhoopDiscriminatedConnectInput, + ConnectorWordpressDiscriminatedConnectInput, + ConnectorWrikeDiscriminatedConnectInput, + ConnectorXeroDiscriminatedConnectInput, + ConnectorYahooDiscriminatedConnectInput, + ConnectorYandexDiscriminatedConnectInput, + ConnectorZapierDiscriminatedConnectInput, + ConnectorZendeskDiscriminatedConnectInput, + ConnectorZenefitsDiscriminatedConnectInput, + ConnectorZohoDeskDiscriminatedConnectInput, + ConnectorZohoDiscriminatedConnectInput, + ConnectorZoomDiscriminatedConnectInput, + ConnectorAirtableDiscriminatedConnectInput, + ConnectorApolloDiscriminatedConnectInput, + ConnectorBrexDiscriminatedConnectInput, + ConnectorCodaDiscriminatedConnectInput, + ConnectorFinchDiscriminatedConnectInput, + ConnectorFirebaseDiscriminatedConnectInput, + ConnectorForeceiptDiscriminatedConnectInput, + ConnectorGreenhouseDiscriminatedConnectInput, + ConnectorHeronDiscriminatedConnectInput, + ConnectorLunchmoneyDiscriminatedConnectInput, + ConnectorMercuryDiscriminatedConnectInput, + ConnectorMergeDiscriminatedConnectInput, + ConnectorMootaDiscriminatedConnectInput, + ConnectorOnebrickDiscriminatedConnectInput, + ConnectorOpenledgerDiscriminatedConnectInput, + ConnectorPlaidDiscriminatedConnectInput, + ConnectorPostgresDiscriminatedConnectInput, + ConnectorRampDiscriminatedConnectInput, + ConnectorSaltedgeDiscriminatedConnectInput, + ConnectorSharepointOnpremDiscriminatedConnectInput, + ConnectorSlackAgentDiscriminatedConnectInput, + ConnectorSplitwiseDiscriminatedConnectInput, + ConnectorStripeDiscriminatedConnectInput, + ConnectorTellerDiscriminatedConnectInput, + ConnectorTogglDiscriminatedConnectInput, + ConnectorTwentyDiscriminatedConnectInput, + ConnectorVenmoDiscriminatedConnectInput, + ConnectorWiseDiscriminatedConnectInput, + ConnectorYodleeDiscriminatedConnectInput, + ], + PropertyInfo(discriminator="connector_name"), +] diff --git a/src/openint/types/upsert_connnector_config_response.py b/src/openint/types/upsert_connnector_config_response.py index 49985c0..48ced39 100644 --- a/src/openint/types/upsert_connnector_config_response.py +++ b/src/openint/types/upsert_connnector_config_response.py @@ -472,6 +472,8 @@ "ConnectorSaltedgeDiscriminatedConnectorConfig", "ConnectorSaltedgeDiscriminatedConnectorConfigConfig", "ConnectorSharepointOnpremDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfig", + "ConnectorSlackAgentDiscriminatedConnectorConfigConfig", "ConnectorSplitwiseDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfig", "ConnectorStripeDiscriminatedConnectorConfigConfig", @@ -6992,6 +6994,63 @@ class ConnectorSharepointOnpremDiscriminatedConnectorConfig(BaseModel): updated_at: Optional[str] = None +class ConnectorSlackAgentDiscriminatedConnectorConfigConfig(BaseModel): + challenge_code: str + """Previous challenge code - e.g. challenge_slack_abc123xyz""" + + challenge_response: str + """USER_PASTED_TOKEN - SLACK_ONETIME_CHALLENGE_CODE""" + + app_id: Optional[str] = None + """App ID - A1234567890""" + + client_id: Optional[str] = None + """Client ID - 1234567890.1234567890""" + + client_secret: Optional[str] = None + """Client secret - abc123...""" + + event_subscription_url: Optional[str] = None + """Initial event subscription URL""" + + initial_oauth_url: Optional[str] = None + """Initial OAuth URL - https://slack.com/oauth/v2/authorize?...""" + + service_token: Optional[str] = None + """Service token - xoxb-...""" + + signing_secret: Optional[str] = None + """Signing secret - abc123...""" + + verification_token: Optional[str] = None + """Verification token - xyz123...""" + + +class ConnectorSlackAgentDiscriminatedConnectorConfig(BaseModel): + config: ConnectorSlackAgentDiscriminatedConnectorConfigConfig + + connector_name: Literal["slack-agent"] + + id: Optional[str] = None + + created_at: Optional[str] = None + + disabled: Optional[bool] = None + + display_name: Optional[str] = None + + metadata: Optional[Dict[str, object]] = None + """ + JSON object can can be used to associate arbitrary metadata to avoid needing a + separate 1-1 table just for simple key values in your application. During + updates this object will be shallowly merged + """ + + org_id: Optional[str] = None + + updated_at: Optional[str] = None + + class ConnectorSplitwiseDiscriminatedConnectorConfig(BaseModel): config: object @@ -7410,6 +7469,7 @@ class ConnectorYodleeDiscriminatedConnectorConfig(BaseModel): ConnectorRampDiscriminatedConnectorConfig, ConnectorSaltedgeDiscriminatedConnectorConfig, ConnectorSharepointOnpremDiscriminatedConnectorConfig, + ConnectorSlackAgentDiscriminatedConnectorConfig, ConnectorSplitwiseDiscriminatedConnectorConfig, ConnectorStripeDiscriminatedConnectorConfig, ConnectorTellerDiscriminatedConnectorConfig, diff --git a/src/openint/types/upsert_organization_response.py b/src/openint/types/upsert_organization_response.py index ddad82a..29635bd 100644 --- a/src/openint/types/upsert_organization_response.py +++ b/src/openint/types/upsert_organization_response.py @@ -8,4 +8,6 @@ class UpsertOrganizationResponse(BaseModel): id: str + api_key: str + created: bool diff --git a/tests/api_resources/test_client.py b/tests/api_resources/test_client.py index 0605ec3..e2832e4 100644 --- a/tests/api_resources/test_client.py +++ b/tests/api_resources/test_client.py @@ -11,7 +11,9 @@ from tests.utils import assert_matches_type from openint.types import ( ListEventsResponse, + PreConnectResponse, CreateTokenResponse, + ConnectorRpcResponse, GetConnectionResponse, ListCustomersResponse, GetCurrentUserResponse, @@ -26,9 +28,10 @@ DeleteConnectionResponse, GetConectorConfigResponse, UpsertOrganizationResponse, + ListConnectorConfigsResponse, DeleteConnectorConfigResponse, - ListConnectionConfigsResponse, ListConnnectorConfigsResponse, + PreConfigureConnectorResponse, CreateConnnectorConfigResponse, UpsertConnnectorConfigResponse, ) @@ -44,7 +47,7 @@ class TestClient: @parametrize def test_method_assign_connection(self, client: Openint) -> None: client_ = client.assign_connection( - repl_id="replId", + repl_id="repl_id", id="conn_", ) assert_matches_type(AssignConnectionResponse, client_, path=["response"]) @@ -53,7 +56,7 @@ def test_method_assign_connection(self, client: Openint) -> None: @parametrize def test_raw_response_assign_connection(self, client: Openint) -> None: response = client.with_raw_response.assign_connection( - repl_id="replId", + repl_id="repl_id", id="conn_", ) @@ -66,7 +69,7 @@ def test_raw_response_assign_connection(self, client: Openint) -> None: @parametrize def test_streaming_response_assign_connection(self, client: Openint) -> None: with client.with_streaming_response.assign_connection( - repl_id="replId", + repl_id="repl_id", id="conn_", ) as response: assert not response.is_closed @@ -82,7 +85,7 @@ def test_streaming_response_assign_connection(self, client: Openint) -> None: def test_path_params_assign_connection(self, client: Openint) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): client.with_raw_response.assign_connection( - repl_id="replId", + repl_id="repl_id", id="", ) @@ -134,6 +137,63 @@ def test_path_params_check_connection(self, client: Openint) -> None: "", ) + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_method_connector_rpc(self, client: Openint) -> None: + client_ = client.connector_rpc( + function_name="function_name", + connector_config_id="ccfg_", + input={"foo": "bar"}, + ) + assert_matches_type(ConnectorRpcResponse, client_, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_raw_response_connector_rpc(self, client: Openint) -> None: + response = client.with_raw_response.connector_rpc( + function_name="function_name", + connector_config_id="ccfg_", + input={"foo": "bar"}, + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client_ = response.parse() + assert_matches_type(ConnectorRpcResponse, client_, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_streaming_response_connector_rpc(self, client: Openint) -> None: + with client.with_streaming_response.connector_rpc( + function_name="function_name", + connector_config_id="ccfg_", + input={"foo": "bar"}, + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client_ = response.parse() + assert_matches_type(ConnectorRpcResponse, client_, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_path_params_connector_rpc(self, client: Openint) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `connector_config_id` but received ''"): + client.with_raw_response.connector_rpc( + function_name="function_name", + connector_config_id="", + input={"foo": "bar"}, + ) + + with pytest.raises(ValueError, match=r"Expected a non-empty value for `function_name` but received ''"): + client.with_raw_response.connector_rpc( + function_name="", + connector_config_id="ccfg_", + input={"foo": "bar"}, + ) + @pytest.mark.skip(reason="Prism tests are disabled") @parametrize def test_method_create_connection(self, client: Openint) -> None: @@ -317,7 +377,7 @@ def test_path_params_create_token(self, client: Openint) -> None: @parametrize def test_method_delete_assignment(self, client: Openint) -> None: client_ = client.delete_assignment( - repl_id="replId", + repl_id="repl_id", id="conn_", ) assert_matches_type(DeleteAssignmentResponse, client_, path=["response"]) @@ -326,7 +386,7 @@ def test_method_delete_assignment(self, client: Openint) -> None: @parametrize def test_raw_response_delete_assignment(self, client: Openint) -> None: response = client.with_raw_response.delete_assignment( - repl_id="replId", + repl_id="repl_id", id="conn_", ) @@ -339,7 +399,7 @@ def test_raw_response_delete_assignment(self, client: Openint) -> None: @parametrize def test_streaming_response_delete_assignment(self, client: Openint) -> None: with client.with_streaming_response.delete_assignment( - repl_id="replId", + repl_id="repl_id", id="conn_", ) as response: assert not response.is_closed @@ -355,7 +415,7 @@ def test_streaming_response_delete_assignment(self, client: Openint) -> None: def test_path_params_delete_assignment(self, client: Openint) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): client.with_raw_response.delete_assignment( - repl_id="replId", + repl_id="repl_id", id="", ) @@ -625,87 +685,87 @@ def test_path_params_list_assignments(self, client: Openint) -> None: @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - def test_method_list_connection_configs(self, client: Openint) -> None: - client_ = client.list_connection_configs() - assert_matches_type(SyncOffsetPagination[ListConnectionConfigsResponse], client_, path=["response"]) + def test_method_list_connections(self, client: Openint) -> None: + client_ = client.list_connections() + assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - def test_method_list_connection_configs_with_all_params(self, client: Openint) -> None: - client_ = client.list_connection_configs( + def test_method_list_connections_with_all_params(self, client: Openint) -> None: + client_ = client.list_connections( + connection_ids=["conn_"], + connector_config_id="ccfg_", connector_names=["accelo"], + customer_id="customer_id", expand=["connector"], + include_secrets=True, limit=0, offset=0, + refresh_policy="none", + repl_id="repl_id", search_query="search_query", ) - assert_matches_type(SyncOffsetPagination[ListConnectionConfigsResponse], client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - def test_raw_response_list_connection_configs(self, client: Openint) -> None: - response = client.with_raw_response.list_connection_configs() + def test_raw_response_list_connections(self, client: Openint) -> None: + response = client.with_raw_response.list_connections() assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" client_ = response.parse() - assert_matches_type(SyncOffsetPagination[ListConnectionConfigsResponse], client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - def test_streaming_response_list_connection_configs(self, client: Openint) -> None: - with client.with_streaming_response.list_connection_configs() as response: + def test_streaming_response_list_connections(self, client: Openint) -> None: + with client.with_streaming_response.list_connections() as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" client_ = response.parse() - assert_matches_type(SyncOffsetPagination[ListConnectionConfigsResponse], client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - def test_method_list_connections(self, client: Openint) -> None: - client_ = client.list_connections() - assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) + def test_method_list_connector_configs(self, client: Openint) -> None: + client_ = client.list_connector_configs() + assert_matches_type(SyncOffsetPagination[ListConnectorConfigsResponse], client_, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - def test_method_list_connections_with_all_params(self, client: Openint) -> None: - client_ = client.list_connections( - connection_ids=["conn_"], - connector_config_id="ccfg_", + def test_method_list_connector_configs_with_all_params(self, client: Openint) -> None: + client_ = client.list_connector_configs( connector_names=["accelo"], - customer_id="customer_id", expand=["connector"], - include_secrets=True, limit=0, offset=0, - refresh_policy="none", - repl_id="repl_id", search_query="search_query", ) - assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectorConfigsResponse], client_, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - def test_raw_response_list_connections(self, client: Openint) -> None: - response = client.with_raw_response.list_connections() + def test_raw_response_list_connector_configs(self, client: Openint) -> None: + response = client.with_raw_response.list_connector_configs() assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" client_ = response.parse() - assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectorConfigsResponse], client_, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - def test_streaming_response_list_connections(self, client: Openint) -> None: - with client.with_streaming_response.list_connections() as response: + def test_streaming_response_list_connector_configs(self, client: Openint) -> None: + with client.with_streaming_response.list_connector_configs() as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" client_ = response.parse() - assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectorConfigsResponse], client_, path=["response"]) assert cast(Any, response.is_closed) is True @@ -866,6 +926,105 @@ def test_streaming_response_list_events(self, client: Openint) -> None: assert cast(Any, response.is_closed) is True + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_method_pre_configure_connector(self, client: Openint) -> None: + client_ = client.pre_configure_connector( + connector_name="accelo", + ) + assert_matches_type(PreConfigureConnectorResponse, client_, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_raw_response_pre_configure_connector(self, client: Openint) -> None: + response = client.with_raw_response.pre_configure_connector( + connector_name="accelo", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client_ = response.parse() + assert_matches_type(PreConfigureConnectorResponse, client_, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_streaming_response_pre_configure_connector(self, client: Openint) -> None: + with client.with_streaming_response.pre_configure_connector( + connector_name="accelo", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client_ = response.parse() + assert_matches_type(PreConfigureConnectorResponse, client_, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_method_pre_connect(self, client: Openint) -> None: + client_ = client.pre_connect( + connector_config_id="connector_config_id", + discriminated_data={ + "connector_name": "accelo", + "pre_connect_input": {}, + }, + options={}, + ) + assert_matches_type(PreConnectResponse, client_, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_method_pre_connect_with_all_params(self, client: Openint) -> None: + client_ = client.pre_connect( + connector_config_id="connector_config_id", + discriminated_data={ + "connector_name": "accelo", + "pre_connect_input": {"connection_id": "connection_id"}, + }, + options={ + "connection_external_id": "string", + "integration_external_id": "string", + }, + ) + assert_matches_type(PreConnectResponse, client_, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_raw_response_pre_connect(self, client: Openint) -> None: + response = client.with_raw_response.pre_connect( + connector_config_id="connector_config_id", + discriminated_data={ + "connector_name": "accelo", + "pre_connect_input": {}, + }, + options={}, + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client_ = response.parse() + assert_matches_type(PreConnectResponse, client_, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + def test_streaming_response_pre_connect(self, client: Openint) -> None: + with client.with_streaming_response.pre_connect( + connector_config_id="connector_config_id", + discriminated_data={ + "connector_name": "accelo", + "pre_connect_input": {}, + }, + options={}, + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client_ = response.parse() + assert_matches_type(PreConnectResponse, client_, path=["response"]) + + assert cast(Any, response.is_closed) is True + @pytest.mark.skip(reason="Prism tests are disabled") @parametrize def test_method_upsert_connnector_config(self, client: Openint) -> None: @@ -1008,7 +1167,7 @@ class TestAsyncClient: @parametrize async def test_method_assign_connection(self, async_client: AsyncOpenint) -> None: client = await async_client.assign_connection( - repl_id="replId", + repl_id="repl_id", id="conn_", ) assert_matches_type(AssignConnectionResponse, client, path=["response"]) @@ -1017,7 +1176,7 @@ async def test_method_assign_connection(self, async_client: AsyncOpenint) -> Non @parametrize async def test_raw_response_assign_connection(self, async_client: AsyncOpenint) -> None: response = await async_client.with_raw_response.assign_connection( - repl_id="replId", + repl_id="repl_id", id="conn_", ) @@ -1030,7 +1189,7 @@ async def test_raw_response_assign_connection(self, async_client: AsyncOpenint) @parametrize async def test_streaming_response_assign_connection(self, async_client: AsyncOpenint) -> None: async with async_client.with_streaming_response.assign_connection( - repl_id="replId", + repl_id="repl_id", id="conn_", ) as response: assert not response.is_closed @@ -1046,7 +1205,7 @@ async def test_streaming_response_assign_connection(self, async_client: AsyncOpe async def test_path_params_assign_connection(self, async_client: AsyncOpenint) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): await async_client.with_raw_response.assign_connection( - repl_id="replId", + repl_id="repl_id", id="", ) @@ -1098,6 +1257,63 @@ async def test_path_params_check_connection(self, async_client: AsyncOpenint) -> "", ) + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_method_connector_rpc(self, async_client: AsyncOpenint) -> None: + client = await async_client.connector_rpc( + function_name="function_name", + connector_config_id="ccfg_", + input={"foo": "bar"}, + ) + assert_matches_type(ConnectorRpcResponse, client, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_raw_response_connector_rpc(self, async_client: AsyncOpenint) -> None: + response = await async_client.with_raw_response.connector_rpc( + function_name="function_name", + connector_config_id="ccfg_", + input={"foo": "bar"}, + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client = await response.parse() + assert_matches_type(ConnectorRpcResponse, client, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_streaming_response_connector_rpc(self, async_client: AsyncOpenint) -> None: + async with async_client.with_streaming_response.connector_rpc( + function_name="function_name", + connector_config_id="ccfg_", + input={"foo": "bar"}, + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client = await response.parse() + assert_matches_type(ConnectorRpcResponse, client, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_path_params_connector_rpc(self, async_client: AsyncOpenint) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `connector_config_id` but received ''"): + await async_client.with_raw_response.connector_rpc( + function_name="function_name", + connector_config_id="", + input={"foo": "bar"}, + ) + + with pytest.raises(ValueError, match=r"Expected a non-empty value for `function_name` but received ''"): + await async_client.with_raw_response.connector_rpc( + function_name="", + connector_config_id="ccfg_", + input={"foo": "bar"}, + ) + @pytest.mark.skip(reason="Prism tests are disabled") @parametrize async def test_method_create_connection(self, async_client: AsyncOpenint) -> None: @@ -1281,7 +1497,7 @@ async def test_path_params_create_token(self, async_client: AsyncOpenint) -> Non @parametrize async def test_method_delete_assignment(self, async_client: AsyncOpenint) -> None: client = await async_client.delete_assignment( - repl_id="replId", + repl_id="repl_id", id="conn_", ) assert_matches_type(DeleteAssignmentResponse, client, path=["response"]) @@ -1290,7 +1506,7 @@ async def test_method_delete_assignment(self, async_client: AsyncOpenint) -> Non @parametrize async def test_raw_response_delete_assignment(self, async_client: AsyncOpenint) -> None: response = await async_client.with_raw_response.delete_assignment( - repl_id="replId", + repl_id="repl_id", id="conn_", ) @@ -1303,7 +1519,7 @@ async def test_raw_response_delete_assignment(self, async_client: AsyncOpenint) @parametrize async def test_streaming_response_delete_assignment(self, async_client: AsyncOpenint) -> None: async with async_client.with_streaming_response.delete_assignment( - repl_id="replId", + repl_id="repl_id", id="conn_", ) as response: assert not response.is_closed @@ -1319,7 +1535,7 @@ async def test_streaming_response_delete_assignment(self, async_client: AsyncOpe async def test_path_params_delete_assignment(self, async_client: AsyncOpenint) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): await async_client.with_raw_response.delete_assignment( - repl_id="replId", + repl_id="repl_id", id="", ) @@ -1589,87 +1805,87 @@ async def test_path_params_list_assignments(self, async_client: AsyncOpenint) -> @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - async def test_method_list_connection_configs(self, async_client: AsyncOpenint) -> None: - client = await async_client.list_connection_configs() - assert_matches_type(AsyncOffsetPagination[ListConnectionConfigsResponse], client, path=["response"]) + async def test_method_list_connections(self, async_client: AsyncOpenint) -> None: + client = await async_client.list_connections() + assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - async def test_method_list_connection_configs_with_all_params(self, async_client: AsyncOpenint) -> None: - client = await async_client.list_connection_configs( + async def test_method_list_connections_with_all_params(self, async_client: AsyncOpenint) -> None: + client = await async_client.list_connections( + connection_ids=["conn_"], + connector_config_id="ccfg_", connector_names=["accelo"], + customer_id="customer_id", expand=["connector"], + include_secrets=True, limit=0, offset=0, + refresh_policy="none", + repl_id="repl_id", search_query="search_query", ) - assert_matches_type(AsyncOffsetPagination[ListConnectionConfigsResponse], client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - async def test_raw_response_list_connection_configs(self, async_client: AsyncOpenint) -> None: - response = await async_client.with_raw_response.list_connection_configs() + async def test_raw_response_list_connections(self, async_client: AsyncOpenint) -> None: + response = await async_client.with_raw_response.list_connections() assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" client = await response.parse() - assert_matches_type(AsyncOffsetPagination[ListConnectionConfigsResponse], client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - async def test_streaming_response_list_connection_configs(self, async_client: AsyncOpenint) -> None: - async with async_client.with_streaming_response.list_connection_configs() as response: + async def test_streaming_response_list_connections(self, async_client: AsyncOpenint) -> None: + async with async_client.with_streaming_response.list_connections() as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" client = await response.parse() - assert_matches_type(AsyncOffsetPagination[ListConnectionConfigsResponse], client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - async def test_method_list_connections(self, async_client: AsyncOpenint) -> None: - client = await async_client.list_connections() - assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) + async def test_method_list_connector_configs(self, async_client: AsyncOpenint) -> None: + client = await async_client.list_connector_configs() + assert_matches_type(AsyncOffsetPagination[ListConnectorConfigsResponse], client, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - async def test_method_list_connections_with_all_params(self, async_client: AsyncOpenint) -> None: - client = await async_client.list_connections( - connection_ids=["conn_"], - connector_config_id="ccfg_", + async def test_method_list_connector_configs_with_all_params(self, async_client: AsyncOpenint) -> None: + client = await async_client.list_connector_configs( connector_names=["accelo"], - customer_id="customer_id", expand=["connector"], - include_secrets=True, limit=0, offset=0, - refresh_policy="none", - repl_id="repl_id", search_query="search_query", ) - assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectorConfigsResponse], client, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - async def test_raw_response_list_connections(self, async_client: AsyncOpenint) -> None: - response = await async_client.with_raw_response.list_connections() + async def test_raw_response_list_connector_configs(self, async_client: AsyncOpenint) -> None: + response = await async_client.with_raw_response.list_connector_configs() assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" client = await response.parse() - assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectorConfigsResponse], client, path=["response"]) @pytest.mark.skip(reason="Prism tests are disabled") @parametrize - async def test_streaming_response_list_connections(self, async_client: AsyncOpenint) -> None: - async with async_client.with_streaming_response.list_connections() as response: + async def test_streaming_response_list_connector_configs(self, async_client: AsyncOpenint) -> None: + async with async_client.with_streaming_response.list_connector_configs() as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" client = await response.parse() - assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectorConfigsResponse], client, path=["response"]) assert cast(Any, response.is_closed) is True @@ -1830,6 +2046,105 @@ async def test_streaming_response_list_events(self, async_client: AsyncOpenint) assert cast(Any, response.is_closed) is True + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_method_pre_configure_connector(self, async_client: AsyncOpenint) -> None: + client = await async_client.pre_configure_connector( + connector_name="accelo", + ) + assert_matches_type(PreConfigureConnectorResponse, client, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_raw_response_pre_configure_connector(self, async_client: AsyncOpenint) -> None: + response = await async_client.with_raw_response.pre_configure_connector( + connector_name="accelo", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client = await response.parse() + assert_matches_type(PreConfigureConnectorResponse, client, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_streaming_response_pre_configure_connector(self, async_client: AsyncOpenint) -> None: + async with async_client.with_streaming_response.pre_configure_connector( + connector_name="accelo", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client = await response.parse() + assert_matches_type(PreConfigureConnectorResponse, client, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_method_pre_connect(self, async_client: AsyncOpenint) -> None: + client = await async_client.pre_connect( + connector_config_id="connector_config_id", + discriminated_data={ + "connector_name": "accelo", + "pre_connect_input": {}, + }, + options={}, + ) + assert_matches_type(PreConnectResponse, client, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_method_pre_connect_with_all_params(self, async_client: AsyncOpenint) -> None: + client = await async_client.pre_connect( + connector_config_id="connector_config_id", + discriminated_data={ + "connector_name": "accelo", + "pre_connect_input": {"connection_id": "connection_id"}, + }, + options={ + "connection_external_id": "string", + "integration_external_id": "string", + }, + ) + assert_matches_type(PreConnectResponse, client, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_raw_response_pre_connect(self, async_client: AsyncOpenint) -> None: + response = await async_client.with_raw_response.pre_connect( + connector_config_id="connector_config_id", + discriminated_data={ + "connector_name": "accelo", + "pre_connect_input": {}, + }, + options={}, + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client = await response.parse() + assert_matches_type(PreConnectResponse, client, path=["response"]) + + @pytest.mark.skip(reason="Prism tests are disabled") + @parametrize + async def test_streaming_response_pre_connect(self, async_client: AsyncOpenint) -> None: + async with async_client.with_streaming_response.pre_connect( + connector_config_id="connector_config_id", + discriminated_data={ + "connector_name": "accelo", + "pre_connect_input": {}, + }, + options={}, + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client = await response.parse() + assert_matches_type(PreConnectResponse, client, path=["response"]) + + assert cast(Any, response.is_closed) is True + @pytest.mark.skip(reason="Prism tests are disabled") @parametrize async def test_method_upsert_connnector_config(self, async_client: AsyncOpenint) -> None: diff --git a/tests/test_models.py b/tests/test_models.py index 944d6ec..8088131 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -8,7 +8,7 @@ from pydantic import Field from openint._utils import PropertyInfo -from openint._compat import PYDANTIC_V2, parse_obj, model_dump, model_json +from openint._compat import PYDANTIC_V1, parse_obj, model_dump, model_json from openint._models import BaseModel, construct_type @@ -294,12 +294,12 @@ class Model(BaseModel): assert cast(bool, m.foo) is True m = Model.construct(foo={"name": 3}) - if PYDANTIC_V2: - assert isinstance(m.foo, Submodel1) - assert m.foo.name == 3 # type: ignore - else: + if PYDANTIC_V1: assert isinstance(m.foo, Submodel2) assert m.foo.name == "3" + else: + assert isinstance(m.foo, Submodel1) + assert m.foo.name == 3 # type: ignore def test_list_of_unions() -> None: @@ -426,10 +426,10 @@ class Model(BaseModel): expected = datetime(2019, 12, 27, 18, 11, 19, 117000, tzinfo=timezone.utc) - if PYDANTIC_V2: - expected_json = '{"created_at":"2019-12-27T18:11:19.117000Z"}' - else: + if PYDANTIC_V1: expected_json = '{"created_at": "2019-12-27T18:11:19.117000+00:00"}' + else: + expected_json = '{"created_at":"2019-12-27T18:11:19.117000Z"}' model = Model.construct(created_at="2019-12-27T18:11:19.117Z") assert model.created_at == expected @@ -531,7 +531,7 @@ class Model2(BaseModel): assert m4.to_dict(mode="python") == {"created_at": datetime.fromisoformat(time_str)} assert m4.to_dict(mode="json") == {"created_at": time_str} - if not PYDANTIC_V2: + if PYDANTIC_V1: with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): m.to_dict(warnings=False) @@ -556,7 +556,7 @@ class Model(BaseModel): assert m3.model_dump() == {"foo": None} assert m3.model_dump(exclude_none=True) == {} - if not PYDANTIC_V2: + if PYDANTIC_V1: with pytest.raises(ValueError, match="round_trip is only supported in Pydantic v2"): m.model_dump(round_trip=True) @@ -580,10 +580,10 @@ class Model(BaseModel): assert json.loads(m.to_json()) == {"FOO": "hello"} assert json.loads(m.to_json(use_api_names=False)) == {"foo": "hello"} - if PYDANTIC_V2: - assert m.to_json(indent=None) == '{"FOO":"hello"}' - else: + if PYDANTIC_V1: assert m.to_json(indent=None) == '{"FOO": "hello"}' + else: + assert m.to_json(indent=None) == '{"FOO":"hello"}' m2 = Model() assert json.loads(m2.to_json()) == {} @@ -595,7 +595,7 @@ class Model(BaseModel): assert json.loads(m3.to_json()) == {"FOO": None} assert json.loads(m3.to_json(exclude_none=True)) == {} - if not PYDANTIC_V2: + if PYDANTIC_V1: with pytest.raises(ValueError, match="warnings is only supported in Pydantic v2"): m.to_json(warnings=False) @@ -622,7 +622,7 @@ class Model(BaseModel): assert json.loads(m3.model_dump_json()) == {"foo": None} assert json.loads(m3.model_dump_json(exclude_none=True)) == {} - if not PYDANTIC_V2: + if PYDANTIC_V1: with pytest.raises(ValueError, match="round_trip is only supported in Pydantic v2"): m.model_dump_json(round_trip=True) @@ -679,12 +679,12 @@ class B(BaseModel): ) assert isinstance(m, A) assert m.type == "a" - if PYDANTIC_V2: - assert m.data == 100 # type: ignore[comparison-overlap] - else: + if PYDANTIC_V1: # pydantic v1 automatically converts inputs to strings # if the expected type is a str assert m.data == "100" + else: + assert m.data == 100 # type: ignore[comparison-overlap] def test_discriminated_unions_unknown_variant() -> None: @@ -768,12 +768,12 @@ class B(BaseModel): ) assert isinstance(m, A) assert m.foo_type == "a" - if PYDANTIC_V2: - assert m.data == 100 # type: ignore[comparison-overlap] - else: + if PYDANTIC_V1: # pydantic v1 automatically converts inputs to strings # if the expected type is a str assert m.data == "100" + else: + assert m.data == 100 # type: ignore[comparison-overlap] def test_discriminated_unions_overlapping_discriminators_invalid_data() -> None: @@ -833,7 +833,7 @@ class B(BaseModel): assert UnionType.__discriminator__ is discriminator -@pytest.mark.skipif(not PYDANTIC_V2, reason="TypeAliasType is not supported in Pydantic v1") +@pytest.mark.skipif(PYDANTIC_V1, reason="TypeAliasType is not supported in Pydantic v1") def test_type_alias_type() -> None: Alias = TypeAliasType("Alias", str) # pyright: ignore @@ -849,7 +849,7 @@ class Model(BaseModel): assert m.union == "bar" -@pytest.mark.skipif(not PYDANTIC_V2, reason="TypeAliasType is not supported in Pydantic v1") +@pytest.mark.skipif(PYDANTIC_V1, reason="TypeAliasType is not supported in Pydantic v1") def test_field_named_cls() -> None: class Model(BaseModel): cls: str @@ -936,7 +936,7 @@ class Type2(BaseModel): assert isinstance(model.value, InnerType2) -@pytest.mark.skipif(not PYDANTIC_V2, reason="this is only supported in pydantic v2 for now") +@pytest.mark.skipif(PYDANTIC_V1, reason="this is only supported in pydantic v2 for now") def test_extra_properties() -> None: class Item(BaseModel): prop: int diff --git a/tests/test_transform.py b/tests/test_transform.py index 991c1b5..a8a6a2b 100644 --- a/tests/test_transform.py +++ b/tests/test_transform.py @@ -15,7 +15,7 @@ parse_datetime, async_transform as _async_transform, ) -from openint._compat import PYDANTIC_V2 +from openint._compat import PYDANTIC_V1 from openint._models import BaseModel _T = TypeVar("_T") @@ -189,7 +189,7 @@ class DateModel(BaseModel): @pytest.mark.asyncio async def test_iso8601_format(use_async: bool) -> None: dt = datetime.fromisoformat("2023-02-23T14:16:36.337692+00:00") - tz = "Z" if PYDANTIC_V2 else "+00:00" + tz = "+00:00" if PYDANTIC_V1 else "Z" assert await transform({"foo": dt}, DatetimeDict, use_async) == {"foo": "2023-02-23T14:16:36.337692+00:00"} # type: ignore[comparison-overlap] assert await transform(DatetimeModel(foo=dt), Any, use_async) == {"foo": "2023-02-23T14:16:36.337692" + tz} # type: ignore[comparison-overlap] @@ -297,11 +297,11 @@ async def test_pydantic_unknown_field(use_async: bool) -> None: @pytest.mark.asyncio async def test_pydantic_mismatched_types(use_async: bool) -> None: model = MyModel.construct(foo=True) - if PYDANTIC_V2: + if PYDANTIC_V1: + params = await transform(model, Any, use_async) + else: with pytest.warns(UserWarning): params = await transform(model, Any, use_async) - else: - params = await transform(model, Any, use_async) assert cast(Any, params) == {"foo": True} @@ -309,11 +309,11 @@ async def test_pydantic_mismatched_types(use_async: bool) -> None: @pytest.mark.asyncio async def test_pydantic_mismatched_object_type(use_async: bool) -> None: model = MyModel.construct(foo=MyModel.construct(hello="world")) - if PYDANTIC_V2: + if PYDANTIC_V1: + params = await transform(model, Any, use_async) + else: with pytest.warns(UserWarning): params = await transform(model, Any, use_async) - else: - params = await transform(model, Any, use_async) assert cast(Any, params) == {"foo": {"hello": "world"}} diff --git a/tests/test_utils/test_datetime_parse.py b/tests/test_utils/test_datetime_parse.py new file mode 100644 index 0000000..bf77083 --- /dev/null +++ b/tests/test_utils/test_datetime_parse.py @@ -0,0 +1,110 @@ +""" +Copied from https://github.com/pydantic/pydantic/blob/v1.10.22/tests/test_datetime_parse.py +with modifications so it works without pydantic v1 imports. +""" + +from typing import Type, Union +from datetime import date, datetime, timezone, timedelta + +import pytest + +from openint._utils import parse_date, parse_datetime + + +def create_tz(minutes: int) -> timezone: + return timezone(timedelta(minutes=minutes)) + + +@pytest.mark.parametrize( + "value,result", + [ + # Valid inputs + ("1494012444.883309", date(2017, 5, 5)), + (b"1494012444.883309", date(2017, 5, 5)), + (1_494_012_444.883_309, date(2017, 5, 5)), + ("1494012444", date(2017, 5, 5)), + (1_494_012_444, date(2017, 5, 5)), + (0, date(1970, 1, 1)), + ("2012-04-23", date(2012, 4, 23)), + (b"2012-04-23", date(2012, 4, 23)), + ("2012-4-9", date(2012, 4, 9)), + (date(2012, 4, 9), date(2012, 4, 9)), + (datetime(2012, 4, 9, 12, 15), date(2012, 4, 9)), + # Invalid inputs + ("x20120423", ValueError), + ("2012-04-56", ValueError), + (19_999_999_999, date(2603, 10, 11)), # just before watershed + (20_000_000_001, date(1970, 8, 20)), # just after watershed + (1_549_316_052, date(2019, 2, 4)), # nowish in s + (1_549_316_052_104, date(2019, 2, 4)), # nowish in ms + (1_549_316_052_104_324, date(2019, 2, 4)), # nowish in μs + (1_549_316_052_104_324_096, date(2019, 2, 4)), # nowish in ns + ("infinity", date(9999, 12, 31)), + ("inf", date(9999, 12, 31)), + (float("inf"), date(9999, 12, 31)), + ("infinity ", date(9999, 12, 31)), + (int("1" + "0" * 100), date(9999, 12, 31)), + (1e1000, date(9999, 12, 31)), + ("-infinity", date(1, 1, 1)), + ("-inf", date(1, 1, 1)), + ("nan", ValueError), + ], +) +def test_date_parsing(value: Union[str, bytes, int, float], result: Union[date, Type[Exception]]) -> None: + if type(result) == type and issubclass(result, Exception): # pyright: ignore[reportUnnecessaryIsInstance] + with pytest.raises(result): + parse_date(value) + else: + assert parse_date(value) == result + + +@pytest.mark.parametrize( + "value,result", + [ + # Valid inputs + # values in seconds + ("1494012444.883309", datetime(2017, 5, 5, 19, 27, 24, 883_309, tzinfo=timezone.utc)), + (1_494_012_444.883_309, datetime(2017, 5, 5, 19, 27, 24, 883_309, tzinfo=timezone.utc)), + ("1494012444", datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)), + (b"1494012444", datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)), + (1_494_012_444, datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)), + # values in ms + ("1494012444000.883309", datetime(2017, 5, 5, 19, 27, 24, 883, tzinfo=timezone.utc)), + ("-1494012444000.883309", datetime(1922, 8, 29, 4, 32, 35, 999117, tzinfo=timezone.utc)), + (1_494_012_444_000, datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)), + ("2012-04-23T09:15:00", datetime(2012, 4, 23, 9, 15)), + ("2012-4-9 4:8:16", datetime(2012, 4, 9, 4, 8, 16)), + ("2012-04-23T09:15:00Z", datetime(2012, 4, 23, 9, 15, 0, 0, timezone.utc)), + ("2012-4-9 4:8:16-0320", datetime(2012, 4, 9, 4, 8, 16, 0, create_tz(-200))), + ("2012-04-23T10:20:30.400+02:30", datetime(2012, 4, 23, 10, 20, 30, 400_000, create_tz(150))), + ("2012-04-23T10:20:30.400+02", datetime(2012, 4, 23, 10, 20, 30, 400_000, create_tz(120))), + ("2012-04-23T10:20:30.400-02", datetime(2012, 4, 23, 10, 20, 30, 400_000, create_tz(-120))), + (b"2012-04-23T10:20:30.400-02", datetime(2012, 4, 23, 10, 20, 30, 400_000, create_tz(-120))), + (datetime(2017, 5, 5), datetime(2017, 5, 5)), + (0, datetime(1970, 1, 1, 0, 0, 0, tzinfo=timezone.utc)), + # Invalid inputs + ("x20120423091500", ValueError), + ("2012-04-56T09:15:90", ValueError), + ("2012-04-23T11:05:00-25:00", ValueError), + (19_999_999_999, datetime(2603, 10, 11, 11, 33, 19, tzinfo=timezone.utc)), # just before watershed + (20_000_000_001, datetime(1970, 8, 20, 11, 33, 20, 1000, tzinfo=timezone.utc)), # just after watershed + (1_549_316_052, datetime(2019, 2, 4, 21, 34, 12, 0, tzinfo=timezone.utc)), # nowish in s + (1_549_316_052_104, datetime(2019, 2, 4, 21, 34, 12, 104_000, tzinfo=timezone.utc)), # nowish in ms + (1_549_316_052_104_324, datetime(2019, 2, 4, 21, 34, 12, 104_324, tzinfo=timezone.utc)), # nowish in μs + (1_549_316_052_104_324_096, datetime(2019, 2, 4, 21, 34, 12, 104_324, tzinfo=timezone.utc)), # nowish in ns + ("infinity", datetime(9999, 12, 31, 23, 59, 59, 999999)), + ("inf", datetime(9999, 12, 31, 23, 59, 59, 999999)), + ("inf ", datetime(9999, 12, 31, 23, 59, 59, 999999)), + (1e50, datetime(9999, 12, 31, 23, 59, 59, 999999)), + (float("inf"), datetime(9999, 12, 31, 23, 59, 59, 999999)), + ("-infinity", datetime(1, 1, 1, 0, 0)), + ("-inf", datetime(1, 1, 1, 0, 0)), + ("nan", ValueError), + ], +) +def test_datetime_parsing(value: Union[str, bytes, int, float], result: Union[datetime, Type[Exception]]) -> None: + if type(result) == type and issubclass(result, Exception): # pyright: ignore[reportUnnecessaryIsInstance] + with pytest.raises(result): + parse_datetime(value) + else: + assert parse_datetime(value) == result diff --git a/tests/utils.py b/tests/utils.py index e67a21c..ee33a52 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -4,7 +4,7 @@ import inspect import traceback import contextlib -from typing import Any, TypeVar, Iterator, cast +from typing import Any, TypeVar, Iterator, Sequence, cast from datetime import date, datetime from typing_extensions import Literal, get_args, get_origin, assert_type @@ -15,10 +15,11 @@ is_list_type, is_union_type, extract_type_arg, + is_sequence_type, is_annotated_type, is_type_alias_type, ) -from openint._compat import PYDANTIC_V2, field_outer_type, get_model_fields +from openint._compat import PYDANTIC_V1, field_outer_type, get_model_fields from openint._models import BaseModel BaseModelT = TypeVar("BaseModelT", bound=BaseModel) @@ -27,12 +28,12 @@ def assert_matches_model(model: type[BaseModelT], value: BaseModelT, *, path: list[str]) -> bool: for name, field in get_model_fields(model).items(): field_value = getattr(value, name) - if PYDANTIC_V2: - allow_none = False - else: + if PYDANTIC_V1: # in v1 nullability was structured differently # https://docs.pydantic.dev/2.0/migration/#required-optional-and-nullable-fields allow_none = getattr(field, "allow_none", False) + else: + allow_none = False assert_matches_type( field_outer_type(field), @@ -71,6 +72,13 @@ def assert_matches_type( if is_list_type(type_): return _assert_list_type(type_, value) + if is_sequence_type(type_): + assert isinstance(value, Sequence) + inner_type = get_args(type_)[0] + for entry in value: # type: ignore + assert_type(inner_type, entry) # type: ignore + return + if origin == str: assert isinstance(value, str) elif origin == int: