From 80624c2bfe3e06d971af96da9a629123b7920290 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 00:28:36 +0000 Subject: [PATCH 1/9] feat(docs): updating documented docs for mintlify (#5) --- .stats.yml | 2 +- src/openint/_client.py | 256 +++++++++++++++++- .../types/client_get_connection_params.py | 57 +++- .../client_list_connection_configs_params.py | 57 +++- tests/api_resources/test_client.py | 12 +- 5 files changed, 371 insertions(+), 13 deletions(-) diff --git a/.stats.yml b/.stats.yml index b70c8fe..5a441b8 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,2 +1,2 @@ configured_endpoints: 5 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-9401d823cca81901da726bddeb09c51d38461d700828a76e7b41abb25bc2e0eb.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-1774a01e29ee20fa16ce371374b9a675da3d1a0a5d3cb911a4acf067d3c7351e.yml diff --git a/src/openint/_client.py b/src/openint/_client.py index 37f25dc..a466d61 100644 --- a/src/openint/_client.py +++ b/src/openint/_client.py @@ -217,6 +217,8 @@ def check_connection( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> CheckConnectionResponse: """ + Verify that a connection is healthy + Args: extra_headers: Send extra headers @@ -240,7 +242,62 @@ def get_connection( self, *, connector_config_id: str | NotGiven = NOT_GIVEN, - connector_name: str | NotGiven = NOT_GIVEN, + connector_name: Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + | NotGiven = NOT_GIVEN, customer_id: str | NotGiven = NOT_GIVEN, expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, @@ -254,7 +311,11 @@ def get_connection( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> GetConnectionResponse: """ + List all connections with optional filtering + Args: + connector_name: The name of the connector + include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets extra_headers: Send extra headers @@ -291,7 +352,62 @@ def get_connection( def list_connection_configs( self, *, - connector_name: str | NotGiven = NOT_GIVEN, + connector_name: Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + | NotGiven = NOT_GIVEN, expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, @@ -303,7 +419,11 @@ def list_connection_configs( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> ListConnectionConfigsResponse: """ + List all connector configurations with optional filtering + Args: + connector_name: The name of the connector + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -347,6 +467,8 @@ def list_connections( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> ListConnectionsResponse: """ + Get details of a specific connection + Args: include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets @@ -400,6 +522,8 @@ def list_events( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> ListEventsResponse: """ + List all events for an organization + Args: extra_headers: Send extra headers @@ -620,6 +744,8 @@ async def check_connection( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> CheckConnectionResponse: """ + Verify that a connection is healthy + Args: extra_headers: Send extra headers @@ -643,7 +769,62 @@ async def get_connection( self, *, connector_config_id: str | NotGiven = NOT_GIVEN, - connector_name: str | NotGiven = NOT_GIVEN, + connector_name: Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + | NotGiven = NOT_GIVEN, customer_id: str | NotGiven = NOT_GIVEN, expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, @@ -657,7 +838,11 @@ async def get_connection( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> GetConnectionResponse: """ + List all connections with optional filtering + Args: + connector_name: The name of the connector + include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets extra_headers: Send extra headers @@ -694,7 +879,62 @@ async def get_connection( async def list_connection_configs( self, *, - connector_name: str | NotGiven = NOT_GIVEN, + connector_name: Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + | NotGiven = NOT_GIVEN, expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, @@ -706,7 +946,11 @@ async def list_connection_configs( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> ListConnectionConfigsResponse: """ + List all connector configurations with optional filtering + Args: + connector_name: The name of the connector + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -750,6 +994,8 @@ async def list_connections( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> ListConnectionsResponse: """ + Get details of a specific connection + Args: include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets @@ -803,6 +1049,8 @@ async def list_events( timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, ) -> ListEventsResponse: """ + List all events for an organization + Args: extra_headers: Send extra headers diff --git a/src/openint/types/client_get_connection_params.py b/src/openint/types/client_get_connection_params.py index 18299a6..70f9c11 100644 --- a/src/openint/types/client_get_connection_params.py +++ b/src/openint/types/client_get_connection_params.py @@ -11,7 +11,62 @@ class ClientGetConnectionParams(TypedDict, total=False): connector_config_id: str - connector_name: str + connector_name: Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + """The name of the connector""" customer_id: str diff --git a/src/openint/types/client_list_connection_configs_params.py b/src/openint/types/client_list_connection_configs_params.py index 92f5ee6..c384d3e 100644 --- a/src/openint/types/client_list_connection_configs_params.py +++ b/src/openint/types/client_list_connection_configs_params.py @@ -9,7 +9,62 @@ class ClientListConnectionConfigsParams(TypedDict, total=False): - connector_name: str + connector_name: Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + """The name of the connector""" expand: List[Literal["connector"]] diff --git a/tests/api_resources/test_client.py b/tests/api_resources/test_client.py index 53452b2..0f4a187 100644 --- a/tests/api_resources/test_client.py +++ b/tests/api_resources/test_client.py @@ -76,8 +76,8 @@ def test_method_get_connection(self, client: Openint) -> None: def test_method_get_connection_with_all_params(self, client: Openint) -> None: client_ = client.get_connection( connector_config_id="connector_config_id", - connector_name="connector_name", - customer_id="customer_id", + connector_name="aircall", + customer_id="x", expand=["connector"], include_secrets="none", limit=1, @@ -117,7 +117,7 @@ def test_method_list_connection_configs(self, client: Openint) -> None: @parametrize def test_method_list_connection_configs_with_all_params(self, client: Openint) -> None: client_ = client.list_connection_configs( - connector_name="connector_name", + connector_name="aircall", expand=["connector"], limit=1, offset=0, @@ -293,8 +293,8 @@ async def test_method_get_connection(self, async_client: AsyncOpenint) -> None: async def test_method_get_connection_with_all_params(self, async_client: AsyncOpenint) -> None: client = await async_client.get_connection( connector_config_id="connector_config_id", - connector_name="connector_name", - customer_id="customer_id", + connector_name="aircall", + customer_id="x", expand=["connector"], include_secrets="none", limit=1, @@ -334,7 +334,7 @@ async def test_method_list_connection_configs(self, async_client: AsyncOpenint) @parametrize async def test_method_list_connection_configs_with_all_params(self, async_client: AsyncOpenint) -> None: client = await async_client.list_connection_configs( - connector_name="connector_name", + connector_name="aircall", expand=["connector"], limit=1, offset=0, From 6b05d115709fed32c7c6884621ac0959abf75ea1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 00:31:59 +0000 Subject: [PATCH 2/9] feat(api): manual updates (#7) --- .stats.yml | 2 +- api.md | 4 + src/openint/_client.py | 358 +++++++++++++++++- src/openint/types/__init__.py | 4 + .../types/client_create_magic_link_params.py | 88 +++++ .../types/client_create_token_params.py | 18 + .../types/create_magic_link_response.py | 10 + src/openint/types/create_token_response.py | 10 + tests/api_resources/test_client.py | 192 ++++++++++ 9 files changed, 684 insertions(+), 2 deletions(-) create mode 100644 src/openint/types/client_create_magic_link_params.py create mode 100644 src/openint/types/client_create_token_params.py create mode 100644 src/openint/types/create_magic_link_response.py create mode 100644 src/openint/types/create_token_response.py diff --git a/.stats.yml b/.stats.yml index 5a441b8..e4a0143 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,2 +1,2 @@ -configured_endpoints: 5 +configured_endpoints: 7 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-1774a01e29ee20fa16ce371374b9a675da3d1a0a5d3cb911a4acf067d3c7351e.yml diff --git a/api.md b/api.md index b9e3ef6..949d6d2 100644 --- a/api.md +++ b/api.md @@ -5,6 +5,8 @@ Types: ```python from openint.types import ( CheckConnectionResponse, + CreateMagicLinkResponse, + CreateTokenResponse, GetConnectionResponse, ListConnectionConfigsResponse, ListConnectionsResponse, @@ -15,6 +17,8 @@ from openint.types import ( Methods: - client.check_connection(id) -> CheckConnectionResponse +- client.create_magic_link(\*\*params) -> CreateMagicLinkResponse +- client.create_token(\*\*params) -> CreateTokenResponse - client.get_connection(\*\*params) -> GetConnectionResponse - client.list_connection_configs(\*\*params) -> ListConnectionConfigsResponse - client.list_connections(id, \*\*params) -> ListConnectionsResponse diff --git a/src/openint/_client.py b/src/openint/_client.py index a466d61..71e4001 100644 --- a/src/openint/_client.py +++ b/src/openint/_client.py @@ -3,7 +3,7 @@ from __future__ import annotations import os -from typing import Any, List, Union, Mapping, cast +from typing import Any, List, Union, Mapping, Optional, cast from typing_extensions import Self, Literal, override import httpx @@ -12,8 +12,10 @@ from ._qs import Querystring from .types import ( client_list_events_params, + client_create_token_params, client_get_connection_params, client_list_connections_params, + client_create_magic_link_params, client_list_connection_configs_params, ) from ._types import ( @@ -50,9 +52,11 @@ make_request_options, ) from .types.list_events_response import ListEventsResponse +from .types.create_token_response import CreateTokenResponse from .types.get_connection_response import GetConnectionResponse from .types.check_connection_response import CheckConnectionResponse from .types.list_connections_response import ListConnectionsResponse +from .types.create_magic_link_response import CreateMagicLinkResponse from .types.list_connection_configs_response import ListConnectionConfigsResponse __all__ = ["Timeout", "Transport", "ProxiesTypes", "RequestOptions", "Openint", "AsyncOpenint", "Client", "AsyncClient"] @@ -238,6 +242,170 @@ def check_connection( cast_to=CheckConnectionResponse, ) + def create_magic_link( + self, + *, + customer_id: str, + email: str, + connection_id: Optional[str] | NotGiven = NOT_GIVEN, + connector_names: Optional[ + Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + ] + | NotGiven = NOT_GIVEN, + redirect_url: Optional[str] | NotGiven = NOT_GIVEN, + theme: Optional[Literal["light", "dark"]] | NotGiven = NOT_GIVEN, + validity_in_seconds: float | NotGiven = NOT_GIVEN, + view: Optional[Literal["manage", "manage-deeplink", "add", "add-deeplink"]] | 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, + ) -> CreateMagicLinkResponse: + """ + Create a magic link for connecting integrations + + Args: + email: The email address of the customer + + connector_names: Filter integrations by comma separated connector names + + redirect_url: Where to send user to after connect / if they press back button + + theme: Magic Link display theme + + validity_in_seconds: How long the magic link will be valid for (in seconds) before it expires + + view: Magic Link tab view + + 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( + "/connect/magic-link", + body=maybe_transform( + { + "customer_id": customer_id, + "email": email, + "connection_id": connection_id, + "connector_names": connector_names, + "redirect_url": redirect_url, + "theme": theme, + "validity_in_seconds": validity_in_seconds, + "view": view, + }, + client_create_magic_link_params.ClientCreateMagicLinkParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CreateMagicLinkResponse, + ) + + def create_token( + self, + *, + customer_id: str, + validity_in_seconds: float | 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, + ) -> CreateTokenResponse: + """ + Create an authentication token for a customer + + Args: + customer_id: Anything that uniquely identifies the customer that you will be sending the + token to + + validity_in_seconds: How long the token will be valid for (in seconds) before it expires + + 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( + "/connect/token", + body=maybe_transform( + { + "customer_id": customer_id, + "validity_in_seconds": validity_in_seconds, + }, + client_create_token_params.ClientCreateTokenParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CreateTokenResponse, + ) + def get_connection( self, *, @@ -765,6 +933,170 @@ async def check_connection( cast_to=CheckConnectionResponse, ) + async def create_magic_link( + self, + *, + customer_id: str, + email: str, + connection_id: Optional[str] | NotGiven = NOT_GIVEN, + connector_names: Optional[ + Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + ] + | NotGiven = NOT_GIVEN, + redirect_url: Optional[str] | NotGiven = NOT_GIVEN, + theme: Optional[Literal["light", "dark"]] | NotGiven = NOT_GIVEN, + validity_in_seconds: float | NotGiven = NOT_GIVEN, + view: Optional[Literal["manage", "manage-deeplink", "add", "add-deeplink"]] | 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, + ) -> CreateMagicLinkResponse: + """ + Create a magic link for connecting integrations + + Args: + email: The email address of the customer + + connector_names: Filter integrations by comma separated connector names + + redirect_url: Where to send user to after connect / if they press back button + + theme: Magic Link display theme + + validity_in_seconds: How long the magic link will be valid for (in seconds) before it expires + + view: Magic Link tab view + + 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( + "/connect/magic-link", + body=await async_maybe_transform( + { + "customer_id": customer_id, + "email": email, + "connection_id": connection_id, + "connector_names": connector_names, + "redirect_url": redirect_url, + "theme": theme, + "validity_in_seconds": validity_in_seconds, + "view": view, + }, + client_create_magic_link_params.ClientCreateMagicLinkParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CreateMagicLinkResponse, + ) + + async def create_token( + self, + *, + customer_id: str, + validity_in_seconds: float | 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, + ) -> CreateTokenResponse: + """ + Create an authentication token for a customer + + Args: + customer_id: Anything that uniquely identifies the customer that you will be sending the + token to + + validity_in_seconds: How long the token will be valid for (in seconds) before it expires + + 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( + "/connect/token", + body=await async_maybe_transform( + { + "customer_id": customer_id, + "validity_in_seconds": validity_in_seconds, + }, + client_create_token_params.ClientCreateTokenParams, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=CreateTokenResponse, + ) + async def get_connection( self, *, @@ -1117,6 +1449,12 @@ def __init__(self, client: Openint) -> None: self.check_connection = to_raw_response_wrapper( client.check_connection, ) + self.create_magic_link = to_raw_response_wrapper( + client.create_magic_link, + ) + self.create_token = to_raw_response_wrapper( + client.create_token, + ) self.get_connection = to_raw_response_wrapper( client.get_connection, ) @@ -1136,6 +1474,12 @@ def __init__(self, client: AsyncOpenint) -> None: self.check_connection = async_to_raw_response_wrapper( client.check_connection, ) + self.create_magic_link = async_to_raw_response_wrapper( + client.create_magic_link, + ) + self.create_token = async_to_raw_response_wrapper( + client.create_token, + ) self.get_connection = async_to_raw_response_wrapper( client.get_connection, ) @@ -1155,6 +1499,12 @@ def __init__(self, client: Openint) -> None: self.check_connection = to_streamed_response_wrapper( client.check_connection, ) + self.create_magic_link = to_streamed_response_wrapper( + client.create_magic_link, + ) + self.create_token = to_streamed_response_wrapper( + client.create_token, + ) self.get_connection = to_streamed_response_wrapper( client.get_connection, ) @@ -1174,6 +1524,12 @@ def __init__(self, client: AsyncOpenint) -> None: self.check_connection = async_to_streamed_response_wrapper( client.check_connection, ) + self.create_magic_link = async_to_streamed_response_wrapper( + client.create_magic_link, + ) + self.create_token = async_to_streamed_response_wrapper( + client.create_token, + ) self.get_connection = async_to_streamed_response_wrapper( client.get_connection, ) diff --git a/src/openint/types/__init__.py b/src/openint/types/__init__.py index 73a1db8..9c39d0e 100644 --- a/src/openint/types/__init__.py +++ b/src/openint/types/__init__.py @@ -3,12 +3,16 @@ from __future__ import annotations from .list_events_response import ListEventsResponse as ListEventsResponse +from .create_token_response import CreateTokenResponse as CreateTokenResponse from .get_connection_response import GetConnectionResponse as GetConnectionResponse from .check_connection_response import CheckConnectionResponse as CheckConnectionResponse from .client_list_events_params import ClientListEventsParams as ClientListEventsParams from .list_connections_response import ListConnectionsResponse as ListConnectionsResponse +from .client_create_token_params import ClientCreateTokenParams as ClientCreateTokenParams +from .create_magic_link_response import CreateMagicLinkResponse as CreateMagicLinkResponse from .client_get_connection_params import ClientGetConnectionParams as ClientGetConnectionParams from .client_list_connections_params import ClientListConnectionsParams as ClientListConnectionsParams +from .client_create_magic_link_params import ClientCreateMagicLinkParams as ClientCreateMagicLinkParams from .list_connection_configs_response import ListConnectionConfigsResponse as ListConnectionConfigsResponse from .client_list_connection_configs_params import ( ClientListConnectionConfigsParams as ClientListConnectionConfigsParams, diff --git a/src/openint/types/client_create_magic_link_params.py b/src/openint/types/client_create_magic_link_params.py new file mode 100644 index 0000000..9989433 --- /dev/null +++ b/src/openint/types/client_create_magic_link_params.py @@ -0,0 +1,88 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ClientCreateMagicLinkParams"] + + +class ClientCreateMagicLinkParams(TypedDict, total=False): + customer_id: Required[str] + + email: Required[str] + """The email address of the customer""" + + connection_id: Optional[str] + + connector_names: Optional[ + Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + ] + """Filter integrations by comma separated connector names""" + + redirect_url: Optional[str] + """Where to send user to after connect / if they press back button""" + + theme: Optional[Literal["light", "dark"]] + """Magic Link display theme""" + + validity_in_seconds: float + """How long the magic link will be valid for (in seconds) before it expires""" + + view: Optional[Literal["manage", "manage-deeplink", "add", "add-deeplink"]] + """Magic Link tab view""" diff --git a/src/openint/types/client_create_token_params.py b/src/openint/types/client_create_token_params.py new file mode 100644 index 0000000..821f434 --- /dev/null +++ b/src/openint/types/client_create_token_params.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["ClientCreateTokenParams"] + + +class ClientCreateTokenParams(TypedDict, total=False): + customer_id: Required[str] + """ + Anything that uniquely identifies the customer that you will be sending the + token to + """ + + validity_in_seconds: float + """How long the token will be valid for (in seconds) before it expires""" diff --git a/src/openint/types/create_magic_link_response.py b/src/openint/types/create_magic_link_response.py new file mode 100644 index 0000000..ace38fa --- /dev/null +++ b/src/openint/types/create_magic_link_response.py @@ -0,0 +1,10 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + + +from .._models import BaseModel + +__all__ = ["CreateMagicLinkResponse"] + + +class CreateMagicLinkResponse(BaseModel): + url: str diff --git a/src/openint/types/create_token_response.py b/src/openint/types/create_token_response.py new file mode 100644 index 0000000..dc0b804 --- /dev/null +++ b/src/openint/types/create_token_response.py @@ -0,0 +1,10 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + + +from .._models import BaseModel + +__all__ = ["CreateTokenResponse"] + + +class CreateTokenResponse(BaseModel): + token: str diff --git a/tests/api_resources/test_client.py b/tests/api_resources/test_client.py index 0f4a187..02e3154 100644 --- a/tests/api_resources/test_client.py +++ b/tests/api_resources/test_client.py @@ -11,8 +11,10 @@ from tests.utils import assert_matches_type from openint.types import ( ListEventsResponse, + CreateTokenResponse, GetConnectionResponse, CheckConnectionResponse, + CreateMagicLinkResponse, ListConnectionsResponse, ListConnectionConfigsResponse, ) @@ -65,6 +67,101 @@ def test_path_params_check_connection(self, client: Openint) -> None: "", ) + @pytest.mark.skip() + @parametrize + def test_method_create_magic_link(self, client: Openint) -> None: + client_ = client.create_magic_link( + customer_id="x", + email="dev@stainless.com", + ) + assert_matches_type(CreateMagicLinkResponse, client_, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_method_create_magic_link_with_all_params(self, client: Openint) -> None: + client_ = client.create_magic_link( + customer_id="x", + email="dev@stainless.com", + connection_id="connection_id", + connector_names="aircall", + redirect_url="redirect_url", + theme="light", + validity_in_seconds=0, + view="manage", + ) + assert_matches_type(CreateMagicLinkResponse, client_, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_raw_response_create_magic_link(self, client: Openint) -> None: + response = client.with_raw_response.create_magic_link( + customer_id="x", + email="dev@stainless.com", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client_ = response.parse() + assert_matches_type(CreateMagicLinkResponse, client_, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_streaming_response_create_magic_link(self, client: Openint) -> None: + with client.with_streaming_response.create_magic_link( + customer_id="x", + email="dev@stainless.com", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client_ = response.parse() + assert_matches_type(CreateMagicLinkResponse, client_, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @pytest.mark.skip() + @parametrize + def test_method_create_token(self, client: Openint) -> None: + client_ = client.create_token( + customer_id="x", + ) + assert_matches_type(CreateTokenResponse, client_, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_method_create_token_with_all_params(self, client: Openint) -> None: + client_ = client.create_token( + customer_id="x", + validity_in_seconds=1, + ) + assert_matches_type(CreateTokenResponse, client_, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_raw_response_create_token(self, client: Openint) -> None: + response = client.with_raw_response.create_token( + customer_id="x", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client_ = response.parse() + assert_matches_type(CreateTokenResponse, client_, path=["response"]) + + @pytest.mark.skip() + @parametrize + def test_streaming_response_create_token(self, client: Openint) -> None: + with client.with_streaming_response.create_token( + customer_id="x", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client_ = response.parse() + assert_matches_type(CreateTokenResponse, client_, path=["response"]) + + assert cast(Any, response.is_closed) is True + @pytest.mark.skip() @parametrize def test_method_get_connection(self, client: Openint) -> None: @@ -282,6 +379,101 @@ async def test_path_params_check_connection(self, async_client: AsyncOpenint) -> "", ) + @pytest.mark.skip() + @parametrize + async def test_method_create_magic_link(self, async_client: AsyncOpenint) -> None: + client = await async_client.create_magic_link( + customer_id="x", + email="dev@stainless.com", + ) + assert_matches_type(CreateMagicLinkResponse, client, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_method_create_magic_link_with_all_params(self, async_client: AsyncOpenint) -> None: + client = await async_client.create_magic_link( + customer_id="x", + email="dev@stainless.com", + connection_id="connection_id", + connector_names="aircall", + redirect_url="redirect_url", + theme="light", + validity_in_seconds=0, + view="manage", + ) + assert_matches_type(CreateMagicLinkResponse, client, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_raw_response_create_magic_link(self, async_client: AsyncOpenint) -> None: + response = await async_client.with_raw_response.create_magic_link( + customer_id="x", + email="dev@stainless.com", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client = await response.parse() + assert_matches_type(CreateMagicLinkResponse, client, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_streaming_response_create_magic_link(self, async_client: AsyncOpenint) -> None: + async with async_client.with_streaming_response.create_magic_link( + customer_id="x", + email="dev@stainless.com", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client = await response.parse() + assert_matches_type(CreateMagicLinkResponse, client, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @pytest.mark.skip() + @parametrize + async def test_method_create_token(self, async_client: AsyncOpenint) -> None: + client = await async_client.create_token( + customer_id="x", + ) + assert_matches_type(CreateTokenResponse, client, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_method_create_token_with_all_params(self, async_client: AsyncOpenint) -> None: + client = await async_client.create_token( + customer_id="x", + validity_in_seconds=1, + ) + assert_matches_type(CreateTokenResponse, client, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_raw_response_create_token(self, async_client: AsyncOpenint) -> None: + response = await async_client.with_raw_response.create_token( + customer_id="x", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + client = await response.parse() + assert_matches_type(CreateTokenResponse, client, path=["response"]) + + @pytest.mark.skip() + @parametrize + async def test_streaming_response_create_token(self, async_client: AsyncOpenint) -> None: + async with async_client.with_streaming_response.create_token( + customer_id="x", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + client = await response.parse() + assert_matches_type(CreateTokenResponse, client, path=["response"]) + + assert cast(Any, response.is_closed) is True + @pytest.mark.skip() @parametrize async def test_method_get_connection(self, async_client: AsyncOpenint) -> None: From 5054460f4d5e441afd71fe29a1ab3ef11ec82cba Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:37:39 +0000 Subject: [PATCH 3/9] feat(api): manual updates (#8) --- .stats.yml | 2 +- README.md | 15 +- src/openint/_client.py | 54 +-- .../types/client_create_magic_link_params.py | 6 +- tests/api_resources/test_client.py | 10 +- tests/conftest.py | 11 +- tests/test_client.py | 348 +++--------------- 7 files changed, 60 insertions(+), 386 deletions(-) diff --git a/.stats.yml b/.stats.yml index e4a0143..133e0bf 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,2 +1,2 @@ configured_endpoints: 7 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-1774a01e29ee20fa16ce371374b9a675da3d1a0a5d3cb911a4acf067d3c7351e.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-ed263d82a28e8475a7ebc5eaa4dfe53255fcd3342d12ec956bf331b169407b3b.yml diff --git a/README.md b/README.md index ebb01d3..d417fb7 100644 --- a/README.md +++ b/README.md @@ -24,34 +24,23 @@ pip install --pre openint The full API of this library can be found in [api.md](api.md). ```python -import os from openint import Openint -client = Openint( - api_key=os.environ.get("OPENINT_API_KEY"), # This is the default and can be omitted -) +client = Openint() response = client.get_connection() print(response.items) ``` -While you can provide an `api_key` keyword argument, -we recommend using [python-dotenv](https://pypi.org/project/python-dotenv/) -to add `OPENINT_API_KEY="My API Key"` to your `.env` file -so that your API Key is not stored in source control. - ## Async usage Simply import `AsyncOpenint` instead of `Openint` and use `await` with each API call: ```python -import os import asyncio from openint import AsyncOpenint -client = AsyncOpenint( - api_key=os.environ.get("OPENINT_API_KEY"), # This is the default and can be omitted -) +client = AsyncOpenint() async def main() -> None: diff --git a/src/openint/_client.py b/src/openint/_client.py index 71e4001..f7a90f1 100644 --- a/src/openint/_client.py +++ b/src/openint/_client.py @@ -128,14 +128,6 @@ def __init__( def qs(self) -> Querystring: return Querystring(array_format="comma") - @property - @override - def auth_headers(self) -> dict[str, str]: - api_key = self.api_key - if api_key is None: - return {} - return {"Authorization": f"Bearer {api_key}"} - @property @override def default_headers(self) -> dict[str, str | Omit]: @@ -145,17 +137,6 @@ def default_headers(self) -> dict[str, str | Omit]: **self._custom_headers, } - @override - def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None: - if self.api_key and headers.get("Authorization"): - return - if isinstance(custom_headers.get("Authorization"), Omit): - return - - raise TypeError( - '"Could not resolve authentication method. Expected the api_key to be set. Or for the `Authorization` headers to be explicitly omitted"' - ) - def copy( self, *, @@ -246,7 +227,6 @@ def create_magic_link( self, *, customer_id: str, - email: str, connection_id: Optional[str] | NotGiven = NOT_GIVEN, connector_names: Optional[ Literal[ @@ -306,6 +286,7 @@ def create_magic_link( ] ] | NotGiven = NOT_GIVEN, + email: str | NotGiven = NOT_GIVEN, redirect_url: Optional[str] | NotGiven = NOT_GIVEN, theme: Optional[Literal["light", "dark"]] | NotGiven = NOT_GIVEN, validity_in_seconds: float | NotGiven = NOT_GIVEN, @@ -321,10 +302,10 @@ def create_magic_link( Create a magic link for connecting integrations Args: - email: The email address of the customer - connector_names: Filter integrations by comma separated connector names + email: The email address of the customer + redirect_url: Where to send user to after connect / if they press back button theme: Magic Link display theme @@ -346,9 +327,9 @@ def create_magic_link( body=maybe_transform( { "customer_id": customer_id, - "email": email, "connection_id": connection_id, "connector_names": connector_names, + "email": email, "redirect_url": redirect_url, "theme": theme, "validity_in_seconds": validity_in_seconds, @@ -819,14 +800,6 @@ def __init__( def qs(self) -> Querystring: return Querystring(array_format="comma") - @property - @override - def auth_headers(self) -> dict[str, str]: - api_key = self.api_key - if api_key is None: - return {} - return {"Authorization": f"Bearer {api_key}"} - @property @override def default_headers(self) -> dict[str, str | Omit]: @@ -836,17 +809,6 @@ def default_headers(self) -> dict[str, str | Omit]: **self._custom_headers, } - @override - def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None: - if self.api_key and headers.get("Authorization"): - return - if isinstance(custom_headers.get("Authorization"), Omit): - return - - raise TypeError( - '"Could not resolve authentication method. Expected the api_key to be set. Or for the `Authorization` headers to be explicitly omitted"' - ) - def copy( self, *, @@ -937,7 +899,6 @@ async def create_magic_link( self, *, customer_id: str, - email: str, connection_id: Optional[str] | NotGiven = NOT_GIVEN, connector_names: Optional[ Literal[ @@ -997,6 +958,7 @@ async def create_magic_link( ] ] | NotGiven = NOT_GIVEN, + email: str | NotGiven = NOT_GIVEN, redirect_url: Optional[str] | NotGiven = NOT_GIVEN, theme: Optional[Literal["light", "dark"]] | NotGiven = NOT_GIVEN, validity_in_seconds: float | NotGiven = NOT_GIVEN, @@ -1012,10 +974,10 @@ async def create_magic_link( Create a magic link for connecting integrations Args: - email: The email address of the customer - connector_names: Filter integrations by comma separated connector names + email: The email address of the customer + redirect_url: Where to send user to after connect / if they press back button theme: Magic Link display theme @@ -1037,9 +999,9 @@ async def create_magic_link( body=await async_maybe_transform( { "customer_id": customer_id, - "email": email, "connection_id": connection_id, "connector_names": connector_names, + "email": email, "redirect_url": redirect_url, "theme": theme, "validity_in_seconds": validity_in_seconds, diff --git a/src/openint/types/client_create_magic_link_params.py b/src/openint/types/client_create_magic_link_params.py index 9989433..735fe70 100644 --- a/src/openint/types/client_create_magic_link_params.py +++ b/src/openint/types/client_create_magic_link_params.py @@ -11,9 +11,6 @@ class ClientCreateMagicLinkParams(TypedDict, total=False): customer_id: Required[str] - email: Required[str] - """The email address of the customer""" - connection_id: Optional[str] connector_names: Optional[ @@ -75,6 +72,9 @@ class ClientCreateMagicLinkParams(TypedDict, total=False): ] """Filter integrations by comma separated connector names""" + email: str + """The email address of the customer""" + redirect_url: Optional[str] """Where to send user to after connect / if they press back button""" diff --git a/tests/api_resources/test_client.py b/tests/api_resources/test_client.py index 02e3154..3785ad7 100644 --- a/tests/api_resources/test_client.py +++ b/tests/api_resources/test_client.py @@ -72,7 +72,6 @@ def test_path_params_check_connection(self, client: Openint) -> None: def test_method_create_magic_link(self, client: Openint) -> None: client_ = client.create_magic_link( customer_id="x", - email="dev@stainless.com", ) assert_matches_type(CreateMagicLinkResponse, client_, path=["response"]) @@ -81,9 +80,9 @@ def test_method_create_magic_link(self, client: Openint) -> None: def test_method_create_magic_link_with_all_params(self, client: Openint) -> None: client_ = client.create_magic_link( customer_id="x", - email="dev@stainless.com", connection_id="connection_id", connector_names="aircall", + email="dev@stainless.com", redirect_url="redirect_url", theme="light", validity_in_seconds=0, @@ -96,7 +95,6 @@ def test_method_create_magic_link_with_all_params(self, client: Openint) -> None def test_raw_response_create_magic_link(self, client: Openint) -> None: response = client.with_raw_response.create_magic_link( customer_id="x", - email="dev@stainless.com", ) assert response.is_closed is True @@ -109,7 +107,6 @@ def test_raw_response_create_magic_link(self, client: Openint) -> None: def test_streaming_response_create_magic_link(self, client: Openint) -> None: with client.with_streaming_response.create_magic_link( customer_id="x", - email="dev@stainless.com", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -384,7 +381,6 @@ async def test_path_params_check_connection(self, async_client: AsyncOpenint) -> async def test_method_create_magic_link(self, async_client: AsyncOpenint) -> None: client = await async_client.create_magic_link( customer_id="x", - email="dev@stainless.com", ) assert_matches_type(CreateMagicLinkResponse, client, path=["response"]) @@ -393,9 +389,9 @@ async def test_method_create_magic_link(self, async_client: AsyncOpenint) -> Non async def test_method_create_magic_link_with_all_params(self, async_client: AsyncOpenint) -> None: client = await async_client.create_magic_link( customer_id="x", - email="dev@stainless.com", connection_id="connection_id", connector_names="aircall", + email="dev@stainless.com", redirect_url="redirect_url", theme="light", validity_in_seconds=0, @@ -408,7 +404,6 @@ async def test_method_create_magic_link_with_all_params(self, async_client: Asyn async def test_raw_response_create_magic_link(self, async_client: AsyncOpenint) -> None: response = await async_client.with_raw_response.create_magic_link( customer_id="x", - email="dev@stainless.com", ) assert response.is_closed is True @@ -421,7 +416,6 @@ async def test_raw_response_create_magic_link(self, async_client: AsyncOpenint) async def test_streaming_response_create_magic_link(self, async_client: AsyncOpenint) -> None: async with async_client.with_streaming_response.create_magic_link( customer_id="x", - email="dev@stainless.com", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" diff --git a/tests/conftest.py b/tests/conftest.py index 7e0d354..0f9c67f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -28,9 +28,6 @@ def pytest_collection_modifyitems(items: list[pytest.Function]) -> None: base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") -api_key = "My API Key" -customer_token = "GENERATED_CUSTOMER_TOKEN" - @pytest.fixture(scope="session") def client(request: FixtureRequest) -> Iterator[Openint]: @@ -38,9 +35,7 @@ def client(request: FixtureRequest) -> Iterator[Openint]: if not isinstance(strict, bool): raise TypeError(f"Unexpected fixture parameter type {type(strict)}, expected {bool}") - with Openint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=strict - ) as client: + with Openint(base_url=base_url, _strict_response_validation=strict) as client: yield client @@ -50,7 +45,5 @@ async def async_client(request: FixtureRequest) -> AsyncIterator[AsyncOpenint]: if not isinstance(strict, bool): raise TypeError(f"Unexpected fixture parameter type {type(strict)}, expected {bool}") - async with AsyncOpenint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=strict - ) as client: + async with AsyncOpenint(base_url=base_url, _strict_response_validation=strict) as client: yield client diff --git a/tests/test_client.py b/tests/test_client.py index 3400914..58576d1 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -36,8 +36,6 @@ from .utils import update_env base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") -api_key = "My API Key" -customer_token = "GENERATED_CUSTOMER_TOKEN" def _get_params(client: BaseClient[Any, Any]) -> dict[str, str]: @@ -59,9 +57,7 @@ def _get_open_connections(client: Openint | AsyncOpenint) -> int: class TestOpenint: - client = Openint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + client = Openint(base_url=base_url, _strict_response_validation=True) @pytest.mark.respx(base_url=base_url) def test_raw_response(self, respx_mock: MockRouter) -> None: @@ -87,14 +83,6 @@ def test_copy(self) -> None: copied = self.client.copy() assert id(copied) != id(self.client) - copied = self.client.copy(api_key="another My API Key") - assert copied.api_key == "another My API Key" - assert self.client.api_key == "My API Key" - - copied = self.client.copy(customer_token="another GENERATED_CUSTOMER_TOKEN") - assert copied.customer_token == "another GENERATED_CUSTOMER_TOKEN" - assert self.client.customer_token == "GENERATED_CUSTOMER_TOKEN" - def test_copy_default_options(self) -> None: # options that have a default are overridden correctly copied = self.client.copy(max_retries=7) @@ -112,13 +100,7 @@ def test_copy_default_options(self) -> None: assert isinstance(self.client.timeout, httpx.Timeout) def test_copy_default_headers(self) -> None: - client = Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - default_headers={"X-Foo": "bar"}, - ) + client = Openint(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) assert client.default_headers["X-Foo"] == "bar" # does not override the already given value when not specified @@ -150,13 +132,7 @@ def test_copy_default_headers(self) -> None: client.copy(set_default_headers={}, default_headers={"X-Foo": "Bar"}) def test_copy_default_query(self) -> None: - client = Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - default_query={"foo": "bar"}, - ) + client = Openint(base_url=base_url, _strict_response_validation=True, default_query={"foo": "bar"}) assert _get_params(client)["foo"] == "bar" # does not override the already given value when not specified @@ -279,13 +255,7 @@ def test_request_timeout(self) -> None: assert timeout == httpx.Timeout(100.0) def test_client_timeout_option(self) -> None: - client = Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - timeout=httpx.Timeout(0), - ) + client = Openint(base_url=base_url, _strict_response_validation=True, timeout=httpx.Timeout(0)) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -294,13 +264,7 @@ def test_client_timeout_option(self) -> None: def test_http_client_timeout_option(self) -> None: # custom timeout given to the httpx client should be used with httpx.Client(timeout=None) as http_client: - client = Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - http_client=http_client, - ) + client = Openint(base_url=base_url, _strict_response_validation=True, http_client=http_client) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -308,13 +272,7 @@ def test_http_client_timeout_option(self) -> None: # no timeout given to the httpx client should not use the httpx default with httpx.Client() as http_client: - client = Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - http_client=http_client, - ) + client = Openint(base_url=base_url, _strict_response_validation=True, http_client=http_client) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -322,13 +280,7 @@ def test_http_client_timeout_option(self) -> None: # explicitly passing the default timeout currently results in it being ignored with httpx.Client(timeout=HTTPX_DEFAULT_TIMEOUT) as http_client: - client = Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - http_client=http_client, - ) + client = Openint(base_url=base_url, _strict_response_validation=True, http_client=http_client) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -337,30 +289,16 @@ def test_http_client_timeout_option(self) -> None: async def test_invalid_http_client(self) -> None: with pytest.raises(TypeError, match="Invalid `http_client` arg"): async with httpx.AsyncClient() as http_client: - Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - http_client=cast(Any, http_client), - ) + Openint(base_url=base_url, _strict_response_validation=True, http_client=cast(Any, http_client)) def test_default_headers_option(self) -> None: - client = Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - default_headers={"X-Foo": "bar"}, - ) + client = Openint(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) assert request.headers.get("x-foo") == "bar" assert request.headers.get("x-stainless-lang") == "python" client2 = Openint( base_url=base_url, - api_key=api_key, - customer_token=customer_token, _strict_response_validation=True, default_headers={ "X-Foo": "stainless", @@ -371,37 +309,8 @@ def test_default_headers_option(self) -> None: assert request.headers.get("x-foo") == "stainless" assert request.headers.get("x-stainless-lang") == "my-overriding-header" - def test_validate_headers(self) -> None: - client = Openint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - assert request.headers.get("Authorization") == f"Bearer {api_key}" - - with update_env(**{"OPENINT_API_KEY": Omit()}): - client2 = Openint( - base_url=base_url, api_key=None, customer_token=customer_token, _strict_response_validation=True - ) - - with pytest.raises( - TypeError, - match="Could not resolve authentication method. Expected the api_key to be set. Or for the `Authorization` headers to be explicitly omitted", - ): - client2._build_request(FinalRequestOptions(method="get", url="/foo")) - - request2 = client2._build_request( - FinalRequestOptions(method="get", url="/foo", headers={"Authorization": Omit()}) - ) - assert request2.headers.get("Authorization") is None - def test_default_query_option(self) -> None: - client = Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - default_query={"query_param": "bar"}, - ) + client = Openint(base_url=base_url, _strict_response_validation=True, default_query={"query_param": "bar"}) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) url = httpx.URL(request.url) assert dict(url.params) == {"query_param": "bar"} @@ -600,12 +509,7 @@ class Model(BaseModel): assert response.foo == 2 def test_base_url_setter(self) -> None: - client = Openint( - base_url="https://example.com/from_init", - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - ) + client = Openint(base_url="https://example.com/from_init", _strict_response_validation=True) assert client.base_url == "https://example.com/from_init/" client.base_url = "https://example.com/from_setter" # type: ignore[assignment] @@ -614,22 +518,15 @@ def test_base_url_setter(self) -> None: def test_base_url_env(self) -> None: with update_env(OPENINT_BASE_URL="http://localhost:5000/from/env"): - client = Openint(api_key=api_key, customer_token=customer_token, _strict_response_validation=True) + client = Openint(_strict_response_validation=True) assert client.base_url == "http://localhost:5000/from/env/" @pytest.mark.parametrize( "client", [ + Openint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), Openint( base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - ), - Openint( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, _strict_response_validation=True, http_client=httpx.Client(), ), @@ -649,16 +546,9 @@ def test_base_url_trailing_slash(self, client: Openint) -> None: @pytest.mark.parametrize( "client", [ + Openint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), Openint( base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - ), - Openint( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, _strict_response_validation=True, http_client=httpx.Client(), ), @@ -678,16 +568,9 @@ def test_base_url_no_trailing_slash(self, client: Openint) -> None: @pytest.mark.parametrize( "client", [ + Openint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), Openint( base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - ), - Openint( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, _strict_response_validation=True, http_client=httpx.Client(), ), @@ -705,9 +588,7 @@ def test_absolute_request_url(self, client: Openint) -> None: assert request.url == "https://myapi.com/foo" def test_copied_client_does_not_close_http(self) -> None: - client = Openint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + client = Openint(base_url=base_url, _strict_response_validation=True) assert not client.is_closed() copied = client.copy() @@ -718,9 +599,7 @@ def test_copied_client_does_not_close_http(self) -> None: assert not client.is_closed() def test_client_context_manager(self) -> None: - client = Openint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + client = Openint(base_url=base_url, _strict_response_validation=True) with client as c2: assert c2 is client assert not c2.is_closed() @@ -741,13 +620,7 @@ class Model(BaseModel): def test_client_max_retries_validation(self) -> None: with pytest.raises(TypeError, match=r"max_retries cannot be None"): - Openint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - max_retries=cast(Any, None), - ) + Openint(base_url=base_url, _strict_response_validation=True, max_retries=cast(Any, None)) @pytest.mark.respx(base_url=base_url) def test_received_text_for_expected_json(self, respx_mock: MockRouter) -> None: @@ -756,16 +629,12 @@ class Model(BaseModel): respx_mock.get("/foo").mock(return_value=httpx.Response(200, text="my-custom-format")) - strict_client = Openint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + strict_client = Openint(base_url=base_url, _strict_response_validation=True) with pytest.raises(APIResponseValidationError): strict_client.get("/foo", cast_to=Model) - client = Openint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=False - ) + client = Openint(base_url=base_url, _strict_response_validation=False) response = client.get("/foo", cast_to=Model) assert isinstance(response, str) # type: ignore[unreachable] @@ -793,9 +662,7 @@ class Model(BaseModel): ) @mock.patch("time.time", mock.MagicMock(return_value=1696004797)) def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str, timeout: float) -> None: - client = Openint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + client = Openint(base_url=base_url, _strict_response_validation=True) headers = httpx.Headers({"retry-after": retry_after}) options = FinalRequestOptions(method="get", url="/foo", max_retries=3) @@ -901,9 +768,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: class TestAsyncOpenint: - client = AsyncOpenint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) @pytest.mark.respx(base_url=base_url) @pytest.mark.asyncio @@ -931,14 +796,6 @@ def test_copy(self) -> None: copied = self.client.copy() assert id(copied) != id(self.client) - copied = self.client.copy(api_key="another My API Key") - assert copied.api_key == "another My API Key" - assert self.client.api_key == "My API Key" - - copied = self.client.copy(customer_token="another GENERATED_CUSTOMER_TOKEN") - assert copied.customer_token == "another GENERATED_CUSTOMER_TOKEN" - assert self.client.customer_token == "GENERATED_CUSTOMER_TOKEN" - def test_copy_default_options(self) -> None: # options that have a default are overridden correctly copied = self.client.copy(max_retries=7) @@ -956,13 +813,7 @@ def test_copy_default_options(self) -> None: assert isinstance(self.client.timeout, httpx.Timeout) def test_copy_default_headers(self) -> None: - client = AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - default_headers={"X-Foo": "bar"}, - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) assert client.default_headers["X-Foo"] == "bar" # does not override the already given value when not specified @@ -994,13 +845,7 @@ def test_copy_default_headers(self) -> None: client.copy(set_default_headers={}, default_headers={"X-Foo": "Bar"}) def test_copy_default_query(self) -> None: - client = AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - default_query={"foo": "bar"}, - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, default_query={"foo": "bar"}) assert _get_params(client)["foo"] == "bar" # does not override the already given value when not specified @@ -1123,13 +968,7 @@ async def test_request_timeout(self) -> None: assert timeout == httpx.Timeout(100.0) async def test_client_timeout_option(self) -> None: - client = AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - timeout=httpx.Timeout(0), - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, timeout=httpx.Timeout(0)) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -1138,13 +977,7 @@ async def test_client_timeout_option(self) -> None: async def test_http_client_timeout_option(self) -> None: # custom timeout given to the httpx client should be used async with httpx.AsyncClient(timeout=None) as http_client: - client = AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - http_client=http_client, - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, http_client=http_client) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -1152,13 +985,7 @@ async def test_http_client_timeout_option(self) -> None: # no timeout given to the httpx client should not use the httpx default async with httpx.AsyncClient() as http_client: - client = AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - http_client=http_client, - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, http_client=http_client) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -1166,13 +993,7 @@ async def test_http_client_timeout_option(self) -> None: # explicitly passing the default timeout currently results in it being ignored async with httpx.AsyncClient(timeout=HTTPX_DEFAULT_TIMEOUT) as http_client: - client = AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - http_client=http_client, - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, http_client=http_client) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -1181,30 +1002,16 @@ async def test_http_client_timeout_option(self) -> None: def test_invalid_http_client(self) -> None: with pytest.raises(TypeError, match="Invalid `http_client` arg"): with httpx.Client() as http_client: - AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - http_client=cast(Any, http_client), - ) + AsyncOpenint(base_url=base_url, _strict_response_validation=True, http_client=cast(Any, http_client)) def test_default_headers_option(self) -> None: - client = AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - default_headers={"X-Foo": "bar"}, - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) assert request.headers.get("x-foo") == "bar" assert request.headers.get("x-stainless-lang") == "python" client2 = AsyncOpenint( base_url=base_url, - api_key=api_key, - customer_token=customer_token, _strict_response_validation=True, default_headers={ "X-Foo": "stainless", @@ -1215,37 +1022,8 @@ def test_default_headers_option(self) -> None: assert request.headers.get("x-foo") == "stainless" assert request.headers.get("x-stainless-lang") == "my-overriding-header" - def test_validate_headers(self) -> None: - client = AsyncOpenint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) - request = client._build_request(FinalRequestOptions(method="get", url="/foo")) - assert request.headers.get("Authorization") == f"Bearer {api_key}" - - with update_env(**{"OPENINT_API_KEY": Omit()}): - client2 = AsyncOpenint( - base_url=base_url, api_key=None, customer_token=customer_token, _strict_response_validation=True - ) - - with pytest.raises( - TypeError, - match="Could not resolve authentication method. Expected the api_key to be set. Or for the `Authorization` headers to be explicitly omitted", - ): - client2._build_request(FinalRequestOptions(method="get", url="/foo")) - - request2 = client2._build_request( - FinalRequestOptions(method="get", url="/foo", headers={"Authorization": Omit()}) - ) - assert request2.headers.get("Authorization") is None - def test_default_query_option(self) -> None: - client = AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - default_query={"query_param": "bar"}, - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, default_query={"query_param": "bar"}) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) url = httpx.URL(request.url) assert dict(url.params) == {"query_param": "bar"} @@ -1444,12 +1222,7 @@ class Model(BaseModel): assert response.foo == 2 def test_base_url_setter(self) -> None: - client = AsyncOpenint( - base_url="https://example.com/from_init", - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - ) + client = AsyncOpenint(base_url="https://example.com/from_init", _strict_response_validation=True) assert client.base_url == "https://example.com/from_init/" client.base_url = "https://example.com/from_setter" # type: ignore[assignment] @@ -1458,22 +1231,15 @@ def test_base_url_setter(self) -> None: def test_base_url_env(self) -> None: with update_env(OPENINT_BASE_URL="http://localhost:5000/from/env"): - client = AsyncOpenint(api_key=api_key, customer_token=customer_token, _strict_response_validation=True) + client = AsyncOpenint(_strict_response_validation=True) assert client.base_url == "http://localhost:5000/from/env/" @pytest.mark.parametrize( "client", [ + AsyncOpenint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), AsyncOpenint( base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - ), - AsyncOpenint( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, _strict_response_validation=True, http_client=httpx.AsyncClient(), ), @@ -1493,16 +1259,9 @@ def test_base_url_trailing_slash(self, client: AsyncOpenint) -> None: @pytest.mark.parametrize( "client", [ + AsyncOpenint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), AsyncOpenint( base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - ), - AsyncOpenint( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, _strict_response_validation=True, http_client=httpx.AsyncClient(), ), @@ -1522,16 +1281,9 @@ def test_base_url_no_trailing_slash(self, client: AsyncOpenint) -> None: @pytest.mark.parametrize( "client", [ + AsyncOpenint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), AsyncOpenint( base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - ), - AsyncOpenint( - base_url="http://localhost:5000/custom/path/", - api_key=api_key, - customer_token=customer_token, _strict_response_validation=True, http_client=httpx.AsyncClient(), ), @@ -1549,9 +1301,7 @@ def test_absolute_request_url(self, client: AsyncOpenint) -> None: assert request.url == "https://myapi.com/foo" async def test_copied_client_does_not_close_http(self) -> None: - client = AsyncOpenint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) assert not client.is_closed() copied = client.copy() @@ -1563,9 +1313,7 @@ async def test_copied_client_does_not_close_http(self) -> None: assert not client.is_closed() async def test_client_context_manager(self) -> None: - client = AsyncOpenint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) async with client as c2: assert c2 is client assert not c2.is_closed() @@ -1587,13 +1335,7 @@ class Model(BaseModel): async def test_client_max_retries_validation(self) -> None: with pytest.raises(TypeError, match=r"max_retries cannot be None"): - AsyncOpenint( - base_url=base_url, - api_key=api_key, - customer_token=customer_token, - _strict_response_validation=True, - max_retries=cast(Any, None), - ) + AsyncOpenint(base_url=base_url, _strict_response_validation=True, max_retries=cast(Any, None)) @pytest.mark.respx(base_url=base_url) @pytest.mark.asyncio @@ -1603,16 +1345,12 @@ class Model(BaseModel): respx_mock.get("/foo").mock(return_value=httpx.Response(200, text="my-custom-format")) - strict_client = AsyncOpenint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + strict_client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) with pytest.raises(APIResponseValidationError): await strict_client.get("/foo", cast_to=Model) - client = AsyncOpenint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=False - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=False) response = await client.get("/foo", cast_to=Model) assert isinstance(response, str) # type: ignore[unreachable] @@ -1641,9 +1379,7 @@ class Model(BaseModel): @mock.patch("time.time", mock.MagicMock(return_value=1696004797)) @pytest.mark.asyncio async def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str, timeout: float) -> None: - client = AsyncOpenint( - base_url=base_url, api_key=api_key, customer_token=customer_token, _strict_response_validation=True - ) + client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) headers = httpx.Headers({"retry-after": retry_after}) options = FinalRequestOptions(method="get", url="/foo", max_retries=3) From ac996ebde3816be7fcef375087d13d62d85374f0 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:40:13 +0000 Subject: [PATCH 4/9] feat(api): manual updates (#9) --- README.md | 15 +++- src/openint/_client.py | 78 +++++++++++++++++ tests/conftest.py | 6 +- tests/test_client.py | 189 ++++++++++++++++++++++++++++++++--------- 4 files changed, 242 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index d417fb7..ebb01d3 100644 --- a/README.md +++ b/README.md @@ -24,23 +24,34 @@ pip install --pre openint The full API of this library can be found in [api.md](api.md). ```python +import os from openint import Openint -client = Openint() +client = Openint( + api_key=os.environ.get("OPENINT_API_KEY"), # This is the default and can be omitted +) response = client.get_connection() print(response.items) ``` +While you can provide an `api_key` keyword argument, +we recommend using [python-dotenv](https://pypi.org/project/python-dotenv/) +to add `OPENINT_API_KEY="My API Key"` to your `.env` file +so that your API Key is not stored in source control. + ## Async usage Simply import `AsyncOpenint` instead of `Openint` and use `await` with each API call: ```python +import os import asyncio from openint import AsyncOpenint -client = AsyncOpenint() +client = AsyncOpenint( + api_key=os.environ.get("OPENINT_API_KEY"), # This is the default and can be omitted +) async def main() -> None: diff --git a/src/openint/_client.py b/src/openint/_client.py index f7a90f1..439902f 100644 --- a/src/openint/_client.py +++ b/src/openint/_client.py @@ -128,6 +128,29 @@ def __init__( def qs(self) -> Querystring: return Querystring(array_format="comma") + @property + @override + def auth_headers(self) -> dict[str, str]: + if self._organization_auth: + return self._organization_auth + if self._customer_auth: + return self._customer_auth + return {} + + @property + def _organization_auth(self) -> dict[str, str]: + api_key = self.api_key + if api_key is None: + return {} + return {"authorization": api_key} + + @property + def _customer_auth(self) -> dict[str, str]: + customer_token = self.customer_token + if customer_token is None: + return {} + return {"Authorization": f"Bearer {customer_token}"} + @property @override def default_headers(self) -> dict[str, str | Omit]: @@ -137,6 +160,22 @@ def default_headers(self) -> dict[str, str | Omit]: **self._custom_headers, } + @override + def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None: + if self.api_key and headers.get("authorization"): + return + if isinstance(custom_headers.get("authorization"), Omit): + return + + if self.customer_token and headers.get("Authorization"): + return + if isinstance(custom_headers.get("Authorization"), Omit): + return + + raise TypeError( + '"Could not resolve authentication method. Expected either api_key or customer_token to be set. Or for one of the `authorization` or `Authorization` headers to be explicitly omitted"' + ) + def copy( self, *, @@ -800,6 +839,29 @@ def __init__( def qs(self) -> Querystring: return Querystring(array_format="comma") + @property + @override + def auth_headers(self) -> dict[str, str]: + if self._organization_auth: + return self._organization_auth + if self._customer_auth: + return self._customer_auth + return {} + + @property + def _organization_auth(self) -> dict[str, str]: + api_key = self.api_key + if api_key is None: + return {} + return {"authorization": api_key} + + @property + def _customer_auth(self) -> dict[str, str]: + customer_token = self.customer_token + if customer_token is None: + return {} + return {"Authorization": f"Bearer {customer_token}"} + @property @override def default_headers(self) -> dict[str, str | Omit]: @@ -809,6 +871,22 @@ def default_headers(self) -> dict[str, str | Omit]: **self._custom_headers, } + @override + def _validate_headers(self, headers: Headers, custom_headers: Headers) -> None: + if self.api_key and headers.get("authorization"): + return + if isinstance(custom_headers.get("authorization"), Omit): + return + + if self.customer_token and headers.get("Authorization"): + return + if isinstance(custom_headers.get("Authorization"), Omit): + return + + raise TypeError( + '"Could not resolve authentication method. Expected either api_key or customer_token to be set. Or for one of the `authorization` or `Authorization` headers to be explicitly omitted"' + ) + def copy( self, *, diff --git a/tests/conftest.py b/tests/conftest.py index 0f9c67f..d5c0a7b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -28,6 +28,8 @@ def pytest_collection_modifyitems(items: list[pytest.Function]) -> None: base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") +api_key = "My API Key" + @pytest.fixture(scope="session") def client(request: FixtureRequest) -> Iterator[Openint]: @@ -35,7 +37,7 @@ def client(request: FixtureRequest) -> Iterator[Openint]: if not isinstance(strict, bool): raise TypeError(f"Unexpected fixture parameter type {type(strict)}, expected {bool}") - with Openint(base_url=base_url, _strict_response_validation=strict) as client: + with Openint(base_url=base_url, api_key=api_key, _strict_response_validation=strict) as client: yield client @@ -45,5 +47,5 @@ async def async_client(request: FixtureRequest) -> AsyncIterator[AsyncOpenint]: if not isinstance(strict, bool): raise TypeError(f"Unexpected fixture parameter type {type(strict)}, expected {bool}") - async with AsyncOpenint(base_url=base_url, _strict_response_validation=strict) as client: + async with AsyncOpenint(base_url=base_url, api_key=api_key, _strict_response_validation=strict) as client: yield client diff --git a/tests/test_client.py b/tests/test_client.py index 58576d1..c21a2fa 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -36,6 +36,7 @@ from .utils import update_env base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") +api_key = "My API Key" def _get_params(client: BaseClient[Any, Any]) -> dict[str, str]: @@ -57,7 +58,7 @@ def _get_open_connections(client: Openint | AsyncOpenint) -> int: class TestOpenint: - client = Openint(base_url=base_url, _strict_response_validation=True) + client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True) @pytest.mark.respx(base_url=base_url) def test_raw_response(self, respx_mock: MockRouter) -> None: @@ -83,6 +84,10 @@ def test_copy(self) -> None: copied = self.client.copy() assert id(copied) != id(self.client) + copied = self.client.copy(api_key="another My API Key") + assert copied.api_key == "another My API Key" + assert self.client.api_key == "My API Key" + def test_copy_default_options(self) -> None: # options that have a default are overridden correctly copied = self.client.copy(max_retries=7) @@ -100,7 +105,9 @@ def test_copy_default_options(self) -> None: assert isinstance(self.client.timeout, httpx.Timeout) def test_copy_default_headers(self) -> None: - client = Openint(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) + client = Openint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} + ) assert client.default_headers["X-Foo"] == "bar" # does not override the already given value when not specified @@ -132,7 +139,9 @@ def test_copy_default_headers(self) -> None: client.copy(set_default_headers={}, default_headers={"X-Foo": "Bar"}) def test_copy_default_query(self) -> None: - client = Openint(base_url=base_url, _strict_response_validation=True, default_query={"foo": "bar"}) + client = Openint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"foo": "bar"} + ) assert _get_params(client)["foo"] == "bar" # does not override the already given value when not specified @@ -255,7 +264,7 @@ def test_request_timeout(self) -> None: assert timeout == httpx.Timeout(100.0) def test_client_timeout_option(self) -> None: - client = Openint(base_url=base_url, _strict_response_validation=True, timeout=httpx.Timeout(0)) + client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True, timeout=httpx.Timeout(0)) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -264,7 +273,9 @@ def test_client_timeout_option(self) -> None: def test_http_client_timeout_option(self) -> None: # custom timeout given to the httpx client should be used with httpx.Client(timeout=None) as http_client: - client = Openint(base_url=base_url, _strict_response_validation=True, http_client=http_client) + client = Openint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -272,7 +283,9 @@ def test_http_client_timeout_option(self) -> None: # no timeout given to the httpx client should not use the httpx default with httpx.Client() as http_client: - client = Openint(base_url=base_url, _strict_response_validation=True, http_client=http_client) + client = Openint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -280,7 +293,9 @@ def test_http_client_timeout_option(self) -> None: # explicitly passing the default timeout currently results in it being ignored with httpx.Client(timeout=HTTPX_DEFAULT_TIMEOUT) as http_client: - client = Openint(base_url=base_url, _strict_response_validation=True, http_client=http_client) + client = Openint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -289,16 +304,24 @@ def test_http_client_timeout_option(self) -> None: async def test_invalid_http_client(self) -> None: with pytest.raises(TypeError, match="Invalid `http_client` arg"): async with httpx.AsyncClient() as http_client: - Openint(base_url=base_url, _strict_response_validation=True, http_client=cast(Any, http_client)) + Openint( + base_url=base_url, + api_key=api_key, + _strict_response_validation=True, + http_client=cast(Any, http_client), + ) def test_default_headers_option(self) -> None: - client = Openint(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) + client = Openint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) assert request.headers.get("x-foo") == "bar" assert request.headers.get("x-stainless-lang") == "python" client2 = Openint( base_url=base_url, + api_key=api_key, _strict_response_validation=True, default_headers={ "X-Foo": "stainless", @@ -309,8 +332,29 @@ def test_default_headers_option(self) -> None: assert request.headers.get("x-foo") == "stainless" assert request.headers.get("x-stainless-lang") == "my-overriding-header" + def test_validate_headers(self) -> None: + client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True) + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + assert request.headers.get("authorization") == api_key + + with update_env(**{"OPENINT_API_KEY": Omit()}): + client2 = Openint(base_url=base_url, api_key=None, _strict_response_validation=True) + + with pytest.raises( + TypeError, + match="Could not resolve authentication method. Expected either api_key or customer_token to be set. Or for one of the `authorization` or `Authorization` headers to be explicitly omitted", + ): + client2._build_request(FinalRequestOptions(method="get", url="/foo")) + + request2 = client2._build_request( + FinalRequestOptions(method="get", url="/foo", headers={"authorization": Omit()}) + ) + assert request2.headers.get("authorization") is None + def test_default_query_option(self) -> None: - client = Openint(base_url=base_url, _strict_response_validation=True, default_query={"query_param": "bar"}) + client = Openint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"query_param": "bar"} + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) url = httpx.URL(request.url) assert dict(url.params) == {"query_param": "bar"} @@ -509,7 +553,7 @@ class Model(BaseModel): assert response.foo == 2 def test_base_url_setter(self) -> None: - client = Openint(base_url="https://example.com/from_init", _strict_response_validation=True) + client = Openint(base_url="https://example.com/from_init", api_key=api_key, _strict_response_validation=True) assert client.base_url == "https://example.com/from_init/" client.base_url = "https://example.com/from_setter" # type: ignore[assignment] @@ -518,15 +562,16 @@ def test_base_url_setter(self) -> None: def test_base_url_env(self) -> None: with update_env(OPENINT_BASE_URL="http://localhost:5000/from/env"): - client = Openint(_strict_response_validation=True) + client = Openint(api_key=api_key, _strict_response_validation=True) assert client.base_url == "http://localhost:5000/from/env/" @pytest.mark.parametrize( "client", [ - Openint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), + Openint(base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True), Openint( base_url="http://localhost:5000/custom/path/", + api_key=api_key, _strict_response_validation=True, http_client=httpx.Client(), ), @@ -546,9 +591,10 @@ def test_base_url_trailing_slash(self, client: Openint) -> None: @pytest.mark.parametrize( "client", [ - Openint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), + Openint(base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True), Openint( base_url="http://localhost:5000/custom/path/", + api_key=api_key, _strict_response_validation=True, http_client=httpx.Client(), ), @@ -568,9 +614,10 @@ def test_base_url_no_trailing_slash(self, client: Openint) -> None: @pytest.mark.parametrize( "client", [ - Openint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), + Openint(base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True), Openint( base_url="http://localhost:5000/custom/path/", + api_key=api_key, _strict_response_validation=True, http_client=httpx.Client(), ), @@ -588,7 +635,7 @@ def test_absolute_request_url(self, client: Openint) -> None: assert request.url == "https://myapi.com/foo" def test_copied_client_does_not_close_http(self) -> None: - client = Openint(base_url=base_url, _strict_response_validation=True) + client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True) assert not client.is_closed() copied = client.copy() @@ -599,7 +646,7 @@ def test_copied_client_does_not_close_http(self) -> None: assert not client.is_closed() def test_client_context_manager(self) -> None: - client = Openint(base_url=base_url, _strict_response_validation=True) + client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True) with client as c2: assert c2 is client assert not c2.is_closed() @@ -620,7 +667,7 @@ class Model(BaseModel): def test_client_max_retries_validation(self) -> None: with pytest.raises(TypeError, match=r"max_retries cannot be None"): - Openint(base_url=base_url, _strict_response_validation=True, max_retries=cast(Any, None)) + Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True, max_retries=cast(Any, None)) @pytest.mark.respx(base_url=base_url) def test_received_text_for_expected_json(self, respx_mock: MockRouter) -> None: @@ -629,12 +676,12 @@ class Model(BaseModel): respx_mock.get("/foo").mock(return_value=httpx.Response(200, text="my-custom-format")) - strict_client = Openint(base_url=base_url, _strict_response_validation=True) + strict_client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True) with pytest.raises(APIResponseValidationError): strict_client.get("/foo", cast_to=Model) - client = Openint(base_url=base_url, _strict_response_validation=False) + client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=False) response = client.get("/foo", cast_to=Model) assert isinstance(response, str) # type: ignore[unreachable] @@ -662,7 +709,7 @@ class Model(BaseModel): ) @mock.patch("time.time", mock.MagicMock(return_value=1696004797)) def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str, timeout: float) -> None: - client = Openint(base_url=base_url, _strict_response_validation=True) + client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True) headers = httpx.Headers({"retry-after": retry_after}) options = FinalRequestOptions(method="get", url="/foo", max_retries=3) @@ -768,7 +815,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: class TestAsyncOpenint: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) + client = AsyncOpenint(base_url=base_url, api_key=api_key, _strict_response_validation=True) @pytest.mark.respx(base_url=base_url) @pytest.mark.asyncio @@ -796,6 +843,10 @@ def test_copy(self) -> None: copied = self.client.copy() assert id(copied) != id(self.client) + copied = self.client.copy(api_key="another My API Key") + assert copied.api_key == "another My API Key" + assert self.client.api_key == "My API Key" + def test_copy_default_options(self) -> None: # options that have a default are overridden correctly copied = self.client.copy(max_retries=7) @@ -813,7 +864,9 @@ def test_copy_default_options(self) -> None: assert isinstance(self.client.timeout, httpx.Timeout) def test_copy_default_headers(self) -> None: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) + client = AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} + ) assert client.default_headers["X-Foo"] == "bar" # does not override the already given value when not specified @@ -845,7 +898,9 @@ def test_copy_default_headers(self) -> None: client.copy(set_default_headers={}, default_headers={"X-Foo": "Bar"}) def test_copy_default_query(self) -> None: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, default_query={"foo": "bar"}) + client = AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"foo": "bar"} + ) assert _get_params(client)["foo"] == "bar" # does not override the already given value when not specified @@ -968,7 +1023,9 @@ async def test_request_timeout(self) -> None: assert timeout == httpx.Timeout(100.0) async def test_client_timeout_option(self) -> None: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, timeout=httpx.Timeout(0)) + client = AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, timeout=httpx.Timeout(0) + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -977,7 +1034,9 @@ async def test_client_timeout_option(self) -> None: async def test_http_client_timeout_option(self) -> None: # custom timeout given to the httpx client should be used async with httpx.AsyncClient(timeout=None) as http_client: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, http_client=http_client) + client = AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -985,7 +1044,9 @@ async def test_http_client_timeout_option(self) -> None: # no timeout given to the httpx client should not use the httpx default async with httpx.AsyncClient() as http_client: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, http_client=http_client) + client = AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -993,7 +1054,9 @@ async def test_http_client_timeout_option(self) -> None: # explicitly passing the default timeout currently results in it being ignored async with httpx.AsyncClient(timeout=HTTPX_DEFAULT_TIMEOUT) as http_client: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, http_client=http_client) + client = AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, http_client=http_client + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) timeout = httpx.Timeout(**request.extensions["timeout"]) # type: ignore @@ -1002,16 +1065,24 @@ async def test_http_client_timeout_option(self) -> None: def test_invalid_http_client(self) -> None: with pytest.raises(TypeError, match="Invalid `http_client` arg"): with httpx.Client() as http_client: - AsyncOpenint(base_url=base_url, _strict_response_validation=True, http_client=cast(Any, http_client)) + AsyncOpenint( + base_url=base_url, + api_key=api_key, + _strict_response_validation=True, + http_client=cast(Any, http_client), + ) def test_default_headers_option(self) -> None: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) + client = AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_headers={"X-Foo": "bar"} + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) assert request.headers.get("x-foo") == "bar" assert request.headers.get("x-stainless-lang") == "python" client2 = AsyncOpenint( base_url=base_url, + api_key=api_key, _strict_response_validation=True, default_headers={ "X-Foo": "stainless", @@ -1022,8 +1093,29 @@ def test_default_headers_option(self) -> None: assert request.headers.get("x-foo") == "stainless" assert request.headers.get("x-stainless-lang") == "my-overriding-header" + def test_validate_headers(self) -> None: + client = AsyncOpenint(base_url=base_url, api_key=api_key, _strict_response_validation=True) + request = client._build_request(FinalRequestOptions(method="get", url="/foo")) + assert request.headers.get("authorization") == api_key + + with update_env(**{"OPENINT_API_KEY": Omit()}): + client2 = AsyncOpenint(base_url=base_url, api_key=None, _strict_response_validation=True) + + with pytest.raises( + TypeError, + match="Could not resolve authentication method. Expected either api_key or customer_token to be set. Or for one of the `authorization` or `Authorization` headers to be explicitly omitted", + ): + client2._build_request(FinalRequestOptions(method="get", url="/foo")) + + request2 = client2._build_request( + FinalRequestOptions(method="get", url="/foo", headers={"authorization": Omit()}) + ) + assert request2.headers.get("authorization") is None + def test_default_query_option(self) -> None: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True, default_query={"query_param": "bar"}) + client = AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, default_query={"query_param": "bar"} + ) request = client._build_request(FinalRequestOptions(method="get", url="/foo")) url = httpx.URL(request.url) assert dict(url.params) == {"query_param": "bar"} @@ -1222,7 +1314,9 @@ class Model(BaseModel): assert response.foo == 2 def test_base_url_setter(self) -> None: - client = AsyncOpenint(base_url="https://example.com/from_init", _strict_response_validation=True) + client = AsyncOpenint( + base_url="https://example.com/from_init", api_key=api_key, _strict_response_validation=True + ) assert client.base_url == "https://example.com/from_init/" client.base_url = "https://example.com/from_setter" # type: ignore[assignment] @@ -1231,15 +1325,18 @@ def test_base_url_setter(self) -> None: def test_base_url_env(self) -> None: with update_env(OPENINT_BASE_URL="http://localhost:5000/from/env"): - client = AsyncOpenint(_strict_response_validation=True) + client = AsyncOpenint(api_key=api_key, _strict_response_validation=True) assert client.base_url == "http://localhost:5000/from/env/" @pytest.mark.parametrize( "client", [ - AsyncOpenint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), + AsyncOpenint( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), AsyncOpenint( base_url="http://localhost:5000/custom/path/", + api_key=api_key, _strict_response_validation=True, http_client=httpx.AsyncClient(), ), @@ -1259,9 +1356,12 @@ def test_base_url_trailing_slash(self, client: AsyncOpenint) -> None: @pytest.mark.parametrize( "client", [ - AsyncOpenint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), + AsyncOpenint( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), AsyncOpenint( base_url="http://localhost:5000/custom/path/", + api_key=api_key, _strict_response_validation=True, http_client=httpx.AsyncClient(), ), @@ -1281,9 +1381,12 @@ def test_base_url_no_trailing_slash(self, client: AsyncOpenint) -> None: @pytest.mark.parametrize( "client", [ - AsyncOpenint(base_url="http://localhost:5000/custom/path/", _strict_response_validation=True), + AsyncOpenint( + base_url="http://localhost:5000/custom/path/", api_key=api_key, _strict_response_validation=True + ), AsyncOpenint( base_url="http://localhost:5000/custom/path/", + api_key=api_key, _strict_response_validation=True, http_client=httpx.AsyncClient(), ), @@ -1301,7 +1404,7 @@ def test_absolute_request_url(self, client: AsyncOpenint) -> None: assert request.url == "https://myapi.com/foo" async def test_copied_client_does_not_close_http(self) -> None: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) + client = AsyncOpenint(base_url=base_url, api_key=api_key, _strict_response_validation=True) assert not client.is_closed() copied = client.copy() @@ -1313,7 +1416,7 @@ async def test_copied_client_does_not_close_http(self) -> None: assert not client.is_closed() async def test_client_context_manager(self) -> None: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) + client = AsyncOpenint(base_url=base_url, api_key=api_key, _strict_response_validation=True) async with client as c2: assert c2 is client assert not c2.is_closed() @@ -1335,7 +1438,9 @@ class Model(BaseModel): async def test_client_max_retries_validation(self) -> None: with pytest.raises(TypeError, match=r"max_retries cannot be None"): - AsyncOpenint(base_url=base_url, _strict_response_validation=True, max_retries=cast(Any, None)) + AsyncOpenint( + base_url=base_url, api_key=api_key, _strict_response_validation=True, max_retries=cast(Any, None) + ) @pytest.mark.respx(base_url=base_url) @pytest.mark.asyncio @@ -1345,12 +1450,12 @@ class Model(BaseModel): respx_mock.get("/foo").mock(return_value=httpx.Response(200, text="my-custom-format")) - strict_client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) + strict_client = AsyncOpenint(base_url=base_url, api_key=api_key, _strict_response_validation=True) with pytest.raises(APIResponseValidationError): await strict_client.get("/foo", cast_to=Model) - client = AsyncOpenint(base_url=base_url, _strict_response_validation=False) + client = AsyncOpenint(base_url=base_url, api_key=api_key, _strict_response_validation=False) response = await client.get("/foo", cast_to=Model) assert isinstance(response, str) # type: ignore[unreachable] @@ -1379,7 +1484,7 @@ class Model(BaseModel): @mock.patch("time.time", mock.MagicMock(return_value=1696004797)) @pytest.mark.asyncio async def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str, timeout: float) -> None: - client = AsyncOpenint(base_url=base_url, _strict_response_validation=True) + client = AsyncOpenint(base_url=base_url, api_key=api_key, _strict_response_validation=True) headers = httpx.Headers({"retry-after": retry_after}) options = FinalRequestOptions(method="get", url="/foo", max_retries=3) From ee8775bcbe538e4ee176ea6b70613f0e7118627f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:49:50 +0000 Subject: [PATCH 5/9] feat(api): manual updates (#10) --- api.md | 4 +- src/openint/_client.py | 42 +- src/openint/pagination.py | 74 ++ .../types/list_connection_configs_response.py | 799 +++++++++--------- src/openint/types/list_events_response.py | 14 +- tests/api_resources/test_client.py | 33 +- 6 files changed, 515 insertions(+), 451 deletions(-) create mode 100644 src/openint/pagination.py diff --git a/api.md b/api.md index 949d6d2..b495a82 100644 --- a/api.md +++ b/api.md @@ -20,6 +20,6 @@ Methods: - client.create_magic_link(\*\*params) -> CreateMagicLinkResponse - client.create_token(\*\*params) -> CreateTokenResponse - client.get_connection(\*\*params) -> GetConnectionResponse -- client.list_connection_configs(\*\*params) -> ListConnectionConfigsResponse +- client.list_connection_configs(\*\*params) -> SyncOffsetPagination[ListConnectionConfigsResponse] - client.list_connections(id, \*\*params) -> ListConnectionsResponse -- client.list_events(\*\*params) -> ListEventsResponse +- client.list_events(\*\*params) -> SyncOffsetPagination[ListEventsResponse] diff --git a/src/openint/_client.py b/src/openint/_client.py index 439902f..1950a4e 100644 --- a/src/openint/_client.py +++ b/src/openint/_client.py @@ -44,11 +44,13 @@ async_to_streamed_response_wrapper, ) from ._streaming import Stream as Stream, AsyncStream as AsyncStream +from .pagination import SyncOffsetPagination, AsyncOffsetPagination from ._exceptions import APIStatusError from ._base_client import ( DEFAULT_MAX_RETRIES, SyncAPIClient, AsyncAPIClient, + AsyncPaginator, make_request_options, ) from .types.list_events_response import ListEventsResponse @@ -605,7 +607,7 @@ def list_connection_configs( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ListConnectionConfigsResponse: + ) -> SyncOffsetPagination[ListConnectionConfigsResponse]: """ List all connector configurations with optional filtering @@ -620,8 +622,9 @@ def list_connection_configs( timeout: Override the client-level default timeout for this request, in seconds """ - return self.get( + return self.get_api_list( "/connector-config", + page=SyncOffsetPagination[ListConnectionConfigsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -637,7 +640,9 @@ def list_connection_configs( client_list_connection_configs_params.ClientListConnectionConfigsParams, ), ), - cast_to=ListConnectionConfigsResponse, + model=cast( + Any, ListConnectionConfigsResponse + ), # Union types cannot be passed in as arguments in the type system ) def list_connections( @@ -708,7 +713,7 @@ def list_events( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ListEventsResponse: + ) -> SyncOffsetPagination[ListEventsResponse]: """ List all events for an organization @@ -721,8 +726,9 @@ def list_events( timeout: Override the client-level default timeout for this request, in seconds """ - return self.get( + return self.get_api_list( "/event", + page=SyncOffsetPagination[ListEventsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -736,7 +742,7 @@ def list_events( client_list_events_params.ClientListEventsParams, ), ), - cast_to=ListEventsResponse, + model=ListEventsResponse, ) @override @@ -1248,7 +1254,7 @@ async def get_connection( cast_to=GetConnectionResponse, ) - async def list_connection_configs( + def list_connection_configs( self, *, connector_name: Literal[ @@ -1316,7 +1322,7 @@ async def list_connection_configs( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ListConnectionConfigsResponse: + ) -> AsyncPaginator[ListConnectionConfigsResponse, AsyncOffsetPagination[ListConnectionConfigsResponse]]: """ List all connector configurations with optional filtering @@ -1331,14 +1337,15 @@ async def list_connection_configs( timeout: Override the client-level default timeout for this request, in seconds """ - return await self.get( + return self.get_api_list( "/connector-config", + page=AsyncOffsetPagination[ListConnectionConfigsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, - query=await async_maybe_transform( + query=maybe_transform( { "connector_name": connector_name, "expand": expand, @@ -1348,7 +1355,9 @@ async def list_connection_configs( client_list_connection_configs_params.ClientListConnectionConfigsParams, ), ), - cast_to=ListConnectionConfigsResponse, + model=cast( + Any, ListConnectionConfigsResponse + ), # Union types cannot be passed in as arguments in the type system ) async def list_connections( @@ -1408,7 +1417,7 @@ async def list_connections( ), ) - async def list_events( + def list_events( self, *, limit: int | NotGiven = NOT_GIVEN, @@ -1419,7 +1428,7 @@ async def list_events( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ListEventsResponse: + ) -> AsyncPaginator[ListEventsResponse, AsyncOffsetPagination[ListEventsResponse]]: """ List all events for an organization @@ -1432,14 +1441,15 @@ async def list_events( timeout: Override the client-level default timeout for this request, in seconds """ - return await self.get( + return self.get_api_list( "/event", + page=AsyncOffsetPagination[ListEventsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, - query=await async_maybe_transform( + query=maybe_transform( { "limit": limit, "offset": offset, @@ -1447,7 +1457,7 @@ async def list_events( client_list_events_params.ClientListEventsParams, ), ), - cast_to=ListEventsResponse, + model=ListEventsResponse, ) @override diff --git a/src/openint/pagination.py b/src/openint/pagination.py new file mode 100644 index 0000000..60bfb3c --- /dev/null +++ b/src/openint/pagination.py @@ -0,0 +1,74 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Generic, TypeVar, Optional +from typing_extensions import override + +from ._base_client import BasePage, PageInfo, BaseSyncPage, BaseAsyncPage + +__all__ = ["SyncOffsetPagination", "AsyncOffsetPagination"] + +_T = TypeVar("_T") + + +class SyncOffsetPagination(BaseSyncPage[_T], BasePage[_T], Generic[_T]): + items: List[_T] + total: Optional[int] = None + offset: Optional[int] = None + limit: Optional[int] = None + + @override + def _get_page_items(self) -> List[_T]: + items = self.items + if not items: + return [] + return items + + @override + def next_page_info(self) -> Optional[PageInfo]: + offset = self.offset + if offset is None: + return None + + length = len(self._get_page_items()) + current_count = offset + length + + total = self.total + if total is None: + return None + + if current_count < total: + return PageInfo(params={"offset": current_count}) + + return None + + +class AsyncOffsetPagination(BaseAsyncPage[_T], BasePage[_T], Generic[_T]): + items: List[_T] + total: Optional[int] = None + offset: Optional[int] = None + limit: Optional[int] = None + + @override + def _get_page_items(self) -> List[_T]: + items = self.items + if not items: + return [] + return items + + @override + def next_page_info(self) -> Optional[PageInfo]: + offset = self.offset + if offset is None: + return None + + length = len(self._get_page_items()) + current_count = offset + length + + total = self.total + if total is None: + return None + + if current_count < total: + return PageInfo(params={"offset": current_count}) + + return None diff --git a/src/openint/types/list_connection_configs_response.py b/src/openint/types/list_connection_configs_response.py index cbdafd8..f182a0a 100644 --- a/src/openint/types/list_connection_configs_response.py +++ b/src/openint/types/list_connection_configs_response.py @@ -10,142 +10,141 @@ __all__ = [ "ListConnectionConfigsResponse", - "Item", - "ItemConnectorsAircallConnectorConfig", - "ItemConnectorsAirtableConnectorConfig", - "ItemConnectorsApolloConnectorConfig", - "ItemConnectorsBeancountConnectorConfig", - "ItemConnectorsBrexConnectorConfig", - "ItemConnectorsBrexConnectorConfigConfig", - "ItemConnectorsBrexConnectorConfigConfigOAuth", - "ItemConnectorsCodaConnectorConfig", - "ItemConnectorsConfluenceConnectorConfig", - "ItemConnectorsConfluenceConnectorConfigConfig", - "ItemConnectorsConfluenceConnectorConfigConfigOAuth", - "ItemConnectorsDebugConnectorConfig", - "ItemConnectorsDiscordConnectorConfig", - "ItemConnectorsDiscordConnectorConfigConfig", - "ItemConnectorsDiscordConnectorConfigConfigOAuth", - "ItemConnectorsFinchConnectorConfig", - "ItemConnectorsFinchConnectorConfigConfig", - "ItemConnectorsFirebaseConnectorConfig", - "ItemConnectorsForeceiptConnectorConfig", - "ItemConnectorsFsConnectorConfig", - "ItemConnectorsGitHubConnectorConfig", - "ItemConnectorsGitHubConnectorConfigConfig", - "ItemConnectorsGitHubConnectorConfigConfigOAuth", - "ItemConnectorsGongConnectorConfig", - "ItemConnectorsGongConnectorConfigConfig", - "ItemConnectorsGongConnectorConfigConfigOAuth", - "ItemConnectorsGoogleConnectorConfig", - "ItemConnectorsGoogleConnectorConfigConfig", - "ItemConnectorsGoogleConnectorConfigConfigIntegrations", - "ItemConnectorsGoogleConnectorConfigConfigIntegrationsCalendar", - "ItemConnectorsGoogleConnectorConfigConfigIntegrationsDocs", - "ItemConnectorsGoogleConnectorConfigConfigIntegrationsDrive", - "ItemConnectorsGoogleConnectorConfigConfigIntegrationsGmail", - "ItemConnectorsGoogleConnectorConfigConfigIntegrationsSheets", - "ItemConnectorsGoogleConnectorConfigConfigIntegrationsSlides", - "ItemConnectorsGoogleConnectorConfigConfigOAuth", - "ItemConnectorsGreenhouseConnectorConfig", - "ItemConnectorsHeronConnectorConfig", - "ItemConnectorsHeronConnectorConfigConfig", - "ItemConnectorsHubspotConnectorConfig", - "ItemConnectorsHubspotConnectorConfigConfig", - "ItemConnectorsHubspotConnectorConfigConfigOAuth", - "ItemConnectorsIntercomConnectorConfig", - "ItemConnectorsIntercomConnectorConfigConfig", - "ItemConnectorsIntercomConnectorConfigConfigOAuth", - "ItemConnectorsJiraConnectorConfig", - "ItemConnectorsJiraConnectorConfigConfig", - "ItemConnectorsJiraConnectorConfigConfigOAuth", - "ItemConnectorsKustomerConnectorConfig", - "ItemConnectorsKustomerConnectorConfigConfig", - "ItemConnectorsKustomerConnectorConfigConfigOAuth", - "ItemConnectorsLeverConnectorConfig", - "ItemConnectorsLeverConnectorConfigConfig", - "ItemConnectorsLeverConnectorConfigConfigOAuth", - "ItemConnectorsLinearConnectorConfig", - "ItemConnectorsLinearConnectorConfigConfig", - "ItemConnectorsLinearConnectorConfigConfigOAuth", - "ItemConnectorsLunchmoneyConnectorConfig", - "ItemConnectorsLunchmoneyConnectorConfigConfig", - "ItemConnectorsMercuryConnectorConfig", - "ItemConnectorsMercuryConnectorConfigConfig", - "ItemConnectorsMercuryConnectorConfigConfigOAuth", - "ItemConnectorsMergeConnectorConfig", - "ItemConnectorsMergeConnectorConfigConfig", - "ItemConnectorsMicrosoftConnectorConfig", - "ItemConnectorsMicrosoftConnectorConfigConfig", - "ItemConnectorsMicrosoftConnectorConfigConfigIntegrations", - "ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsOutlook", - "ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsSharepoint", - "ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsTeams", - "ItemConnectorsMicrosoftConnectorConfigConfigOAuth", - "ItemConnectorsMongoDBConnectorConfig", - "ItemConnectorsMootaConnectorConfig", - "ItemConnectorsMootaConnectorConfigConfig", - "ItemConnectorsOnebrickConnectorConfig", - "ItemConnectorsOnebrickConnectorConfigConfig", - "ItemConnectorsOutreachConnectorConfig", - "ItemConnectorsOutreachConnectorConfigConfig", - "ItemConnectorsOutreachConnectorConfigConfigOAuth", - "ItemConnectorsPipedriveConnectorConfig", - "ItemConnectorsPipedriveConnectorConfigConfig", - "ItemConnectorsPipedriveConnectorConfigConfigOAuth", - "ItemConnectorsPlaidConnectorConfig", - "ItemConnectorsPlaidConnectorConfigConfig", - "ItemConnectorsPlaidConnectorConfigConfigCredentials", - "ItemConnectorsPostgresConnectorConfig", - "ItemConnectorsQboConnectorConfig", - "ItemConnectorsQboConnectorConfigConfig", - "ItemConnectorsQboConnectorConfigConfigOAuth", - "ItemConnectorsRampConnectorConfig", - "ItemConnectorsRampConnectorConfigConfig", - "ItemConnectorsRampConnectorConfigConfigOAuth", - "ItemConnectorsRevertConnectorConfig", - "ItemConnectorsRevertConnectorConfigConfig", - "ItemConnectorsSalesforceConnectorConfig", - "ItemConnectorsSalesforceConnectorConfigConfig", - "ItemConnectorsSalesforceConnectorConfigConfigOAuth", - "ItemConnectorsSalesloftConnectorConfig", - "ItemConnectorsSalesloftConnectorConfigConfig", - "ItemConnectorsSalesloftConnectorConfigConfigOAuth", - "ItemConnectorsSaltedgeConnectorConfig", - "ItemConnectorsSaltedgeConnectorConfigConfig", - "ItemConnectorsSlackConnectorConfig", - "ItemConnectorsSlackConnectorConfigConfig", - "ItemConnectorsSlackConnectorConfigConfigOAuth", - "ItemConnectorsSplitwiseConnectorConfig", - "ItemConnectorsSpreadsheetConnectorConfig", - "ItemConnectorsSpreadsheetConnectorConfigConfig", - "ItemConnectorsStripeConnectorConfig", - "ItemConnectorsStripeConnectorConfigConfig", - "ItemConnectorsStripeConnectorConfigConfigOAuth", - "ItemConnectorsTellerConnectorConfig", - "ItemConnectorsTellerConnectorConfigConfig", - "ItemConnectorsTogglConnectorConfig", - "ItemConnectorsTwentyConnectorConfig", - "ItemConnectorsVenmoConnectorConfig", - "ItemConnectorsVenmoConnectorConfigConfig", - "ItemConnectorsVenmoConnectorConfigConfigProxy", - "ItemConnectorsWebhookConnectorConfig", - "ItemConnectorsWiseConnectorConfig", - "ItemConnectorsXeroConnectorConfig", - "ItemConnectorsXeroConnectorConfigConfig", - "ItemConnectorsXeroConnectorConfigConfigOAuth", - "ItemConnectorsYodleeConnectorConfig", - "ItemConnectorsYodleeConnectorConfigConfig", - "ItemConnectorsYodleeConnectorConfigConfigProxy", - "ItemConnectorsZohodeskConnectorConfig", - "ItemConnectorsZohodeskConnectorConfigConfig", - "ItemConnectorsZohodeskConnectorConfigConfigOAuth", - "ItemConnectorsGoogledriveConnectorConfig", - "ItemConnectorsGoogledriveConnectorConfigConfig", + "ConnectorsAircallConnectorConfig", + "ConnectorsAirtableConnectorConfig", + "ConnectorsApolloConnectorConfig", + "ConnectorsBeancountConnectorConfig", + "ConnectorsBrexConnectorConfig", + "ConnectorsBrexConnectorConfigConfig", + "ConnectorsBrexConnectorConfigConfigOAuth", + "ConnectorsCodaConnectorConfig", + "ConnectorsConfluenceConnectorConfig", + "ConnectorsConfluenceConnectorConfigConfig", + "ConnectorsConfluenceConnectorConfigConfigOAuth", + "ConnectorsDebugConnectorConfig", + "ConnectorsDiscordConnectorConfig", + "ConnectorsDiscordConnectorConfigConfig", + "ConnectorsDiscordConnectorConfigConfigOAuth", + "ConnectorsFinchConnectorConfig", + "ConnectorsFinchConnectorConfigConfig", + "ConnectorsFirebaseConnectorConfig", + "ConnectorsForeceiptConnectorConfig", + "ConnectorsFsConnectorConfig", + "ConnectorsGitHubConnectorConfig", + "ConnectorsGitHubConnectorConfigConfig", + "ConnectorsGitHubConnectorConfigConfigOAuth", + "ConnectorsGongConnectorConfig", + "ConnectorsGongConnectorConfigConfig", + "ConnectorsGongConnectorConfigConfigOAuth", + "ConnectorsGoogleConnectorConfig", + "ConnectorsGoogleConnectorConfigConfig", + "ConnectorsGoogleConnectorConfigConfigIntegrations", + "ConnectorsGoogleConnectorConfigConfigIntegrationsCalendar", + "ConnectorsGoogleConnectorConfigConfigIntegrationsDocs", + "ConnectorsGoogleConnectorConfigConfigIntegrationsDrive", + "ConnectorsGoogleConnectorConfigConfigIntegrationsGmail", + "ConnectorsGoogleConnectorConfigConfigIntegrationsSheets", + "ConnectorsGoogleConnectorConfigConfigIntegrationsSlides", + "ConnectorsGoogleConnectorConfigConfigOAuth", + "ConnectorsGreenhouseConnectorConfig", + "ConnectorsHeronConnectorConfig", + "ConnectorsHeronConnectorConfigConfig", + "ConnectorsHubspotConnectorConfig", + "ConnectorsHubspotConnectorConfigConfig", + "ConnectorsHubspotConnectorConfigConfigOAuth", + "ConnectorsIntercomConnectorConfig", + "ConnectorsIntercomConnectorConfigConfig", + "ConnectorsIntercomConnectorConfigConfigOAuth", + "ConnectorsJiraConnectorConfig", + "ConnectorsJiraConnectorConfigConfig", + "ConnectorsJiraConnectorConfigConfigOAuth", + "ConnectorsKustomerConnectorConfig", + "ConnectorsKustomerConnectorConfigConfig", + "ConnectorsKustomerConnectorConfigConfigOAuth", + "ConnectorsLeverConnectorConfig", + "ConnectorsLeverConnectorConfigConfig", + "ConnectorsLeverConnectorConfigConfigOAuth", + "ConnectorsLinearConnectorConfig", + "ConnectorsLinearConnectorConfigConfig", + "ConnectorsLinearConnectorConfigConfigOAuth", + "ConnectorsLunchmoneyConnectorConfig", + "ConnectorsLunchmoneyConnectorConfigConfig", + "ConnectorsMercuryConnectorConfig", + "ConnectorsMercuryConnectorConfigConfig", + "ConnectorsMercuryConnectorConfigConfigOAuth", + "ConnectorsMergeConnectorConfig", + "ConnectorsMergeConnectorConfigConfig", + "ConnectorsMicrosoftConnectorConfig", + "ConnectorsMicrosoftConnectorConfigConfig", + "ConnectorsMicrosoftConnectorConfigConfigIntegrations", + "ConnectorsMicrosoftConnectorConfigConfigIntegrationsOutlook", + "ConnectorsMicrosoftConnectorConfigConfigIntegrationsSharepoint", + "ConnectorsMicrosoftConnectorConfigConfigIntegrationsTeams", + "ConnectorsMicrosoftConnectorConfigConfigOAuth", + "ConnectorsMongoDBConnectorConfig", + "ConnectorsMootaConnectorConfig", + "ConnectorsMootaConnectorConfigConfig", + "ConnectorsOnebrickConnectorConfig", + "ConnectorsOnebrickConnectorConfigConfig", + "ConnectorsOutreachConnectorConfig", + "ConnectorsOutreachConnectorConfigConfig", + "ConnectorsOutreachConnectorConfigConfigOAuth", + "ConnectorsPipedriveConnectorConfig", + "ConnectorsPipedriveConnectorConfigConfig", + "ConnectorsPipedriveConnectorConfigConfigOAuth", + "ConnectorsPlaidConnectorConfig", + "ConnectorsPlaidConnectorConfigConfig", + "ConnectorsPlaidConnectorConfigConfigCredentials", + "ConnectorsPostgresConnectorConfig", + "ConnectorsQboConnectorConfig", + "ConnectorsQboConnectorConfigConfig", + "ConnectorsQboConnectorConfigConfigOAuth", + "ConnectorsRampConnectorConfig", + "ConnectorsRampConnectorConfigConfig", + "ConnectorsRampConnectorConfigConfigOAuth", + "ConnectorsRevertConnectorConfig", + "ConnectorsRevertConnectorConfigConfig", + "ConnectorsSalesforceConnectorConfig", + "ConnectorsSalesforceConnectorConfigConfig", + "ConnectorsSalesforceConnectorConfigConfigOAuth", + "ConnectorsSalesloftConnectorConfig", + "ConnectorsSalesloftConnectorConfigConfig", + "ConnectorsSalesloftConnectorConfigConfigOAuth", + "ConnectorsSaltedgeConnectorConfig", + "ConnectorsSaltedgeConnectorConfigConfig", + "ConnectorsSlackConnectorConfig", + "ConnectorsSlackConnectorConfigConfig", + "ConnectorsSlackConnectorConfigConfigOAuth", + "ConnectorsSplitwiseConnectorConfig", + "ConnectorsSpreadsheetConnectorConfig", + "ConnectorsSpreadsheetConnectorConfigConfig", + "ConnectorsStripeConnectorConfig", + "ConnectorsStripeConnectorConfigConfig", + "ConnectorsStripeConnectorConfigConfigOAuth", + "ConnectorsTellerConnectorConfig", + "ConnectorsTellerConnectorConfigConfig", + "ConnectorsTogglConnectorConfig", + "ConnectorsTwentyConnectorConfig", + "ConnectorsVenmoConnectorConfig", + "ConnectorsVenmoConnectorConfigConfig", + "ConnectorsVenmoConnectorConfigConfigProxy", + "ConnectorsWebhookConnectorConfig", + "ConnectorsWiseConnectorConfig", + "ConnectorsXeroConnectorConfig", + "ConnectorsXeroConnectorConfigConfig", + "ConnectorsXeroConnectorConfigConfigOAuth", + "ConnectorsYodleeConnectorConfig", + "ConnectorsYodleeConnectorConfigConfig", + "ConnectorsYodleeConnectorConfigConfigProxy", + "ConnectorsZohodeskConnectorConfig", + "ConnectorsZohodeskConnectorConfigConfig", + "ConnectorsZohodeskConnectorConfigConfigOAuth", + "ConnectorsGoogledriveConnectorConfig", + "ConnectorsGoogledriveConnectorConfigConfig", ] -class ItemConnectorsAircallConnectorConfig(BaseModel): +class ConnectorsAircallConnectorConfig(BaseModel): config: None connector_name: Literal["aircall"] @@ -159,7 +158,7 @@ class ItemConnectorsAircallConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsAirtableConnectorConfig(BaseModel): +class ConnectorsAirtableConnectorConfig(BaseModel): config: None connector_name: Literal["airtable"] @@ -173,7 +172,7 @@ class ItemConnectorsAirtableConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsApolloConnectorConfig(BaseModel): +class ConnectorsApolloConnectorConfig(BaseModel): config: None connector_name: Literal["apollo"] @@ -187,7 +186,7 @@ class ItemConnectorsApolloConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsBeancountConnectorConfig(BaseModel): +class ConnectorsBeancountConnectorConfig(BaseModel): config: None connector_name: Literal["beancount"] @@ -201,20 +200,20 @@ class ItemConnectorsBeancountConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsBrexConnectorConfigConfigOAuth(BaseModel): +class ConnectorsBrexConnectorConfigConfigOAuth(BaseModel): client_id: str = FieldInfo(alias="clientId") client_secret: str = FieldInfo(alias="clientSecret") -class ItemConnectorsBrexConnectorConfigConfig(BaseModel): +class ConnectorsBrexConnectorConfigConfig(BaseModel): apikey_auth: Optional[bool] = FieldInfo(alias="apikeyAuth", default=None) - oauth: Optional[ItemConnectorsBrexConnectorConfigConfigOAuth] = None + oauth: Optional[ConnectorsBrexConnectorConfigConfigOAuth] = None -class ItemConnectorsBrexConnectorConfig(BaseModel): - config: ItemConnectorsBrexConnectorConfigConfig +class ConnectorsBrexConnectorConfig(BaseModel): + config: ConnectorsBrexConnectorConfigConfig connector_name: Literal["brex"] @@ -227,7 +226,7 @@ class ItemConnectorsBrexConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsCodaConnectorConfig(BaseModel): +class ConnectorsCodaConnectorConfig(BaseModel): config: None connector_name: Literal["coda"] @@ -241,7 +240,7 @@ class ItemConnectorsCodaConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsConfluenceConnectorConfigConfigOAuth(BaseModel): +class ConnectorsConfluenceConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -249,12 +248,12 @@ class ItemConnectorsConfluenceConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsConfluenceConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsConfluenceConnectorConfigConfigOAuth +class ConnectorsConfluenceConnectorConfigConfig(BaseModel): + oauth: ConnectorsConfluenceConnectorConfigConfigOAuth -class ItemConnectorsConfluenceConnectorConfig(BaseModel): - config: ItemConnectorsConfluenceConnectorConfigConfig +class ConnectorsConfluenceConnectorConfig(BaseModel): + config: ConnectorsConfluenceConnectorConfigConfig connector_name: Literal["confluence"] @@ -267,7 +266,7 @@ class ItemConnectorsConfluenceConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsDebugConnectorConfig(BaseModel): +class ConnectorsDebugConnectorConfig(BaseModel): connector_name: Literal["debug"] id: Optional[str] = None @@ -281,7 +280,7 @@ class ItemConnectorsDebugConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsDiscordConnectorConfigConfigOAuth(BaseModel): +class ConnectorsDiscordConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -289,12 +288,12 @@ class ItemConnectorsDiscordConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsDiscordConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsDiscordConnectorConfigConfigOAuth +class ConnectorsDiscordConnectorConfigConfig(BaseModel): + oauth: ConnectorsDiscordConnectorConfigConfigOAuth -class ItemConnectorsDiscordConnectorConfig(BaseModel): - config: ItemConnectorsDiscordConnectorConfigConfig +class ConnectorsDiscordConnectorConfig(BaseModel): + config: ConnectorsDiscordConnectorConfigConfig connector_name: Literal["discord"] @@ -307,7 +306,7 @@ class ItemConnectorsDiscordConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsFinchConnectorConfigConfig(BaseModel): +class ConnectorsFinchConnectorConfigConfig(BaseModel): client_id: str client_secret: str @@ -319,8 +318,8 @@ class ItemConnectorsFinchConnectorConfigConfig(BaseModel): api_version: Optional[str] = None -class ItemConnectorsFinchConnectorConfig(BaseModel): - config: ItemConnectorsFinchConnectorConfigConfig +class ConnectorsFinchConnectorConfig(BaseModel): + config: ConnectorsFinchConnectorConfigConfig connector_name: Literal["finch"] @@ -333,7 +332,7 @@ class ItemConnectorsFinchConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsFirebaseConnectorConfig(BaseModel): +class ConnectorsFirebaseConnectorConfig(BaseModel): config: None connector_name: Literal["firebase"] @@ -347,7 +346,7 @@ class ItemConnectorsFirebaseConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsForeceiptConnectorConfig(BaseModel): +class ConnectorsForeceiptConnectorConfig(BaseModel): config: None connector_name: Literal["foreceipt"] @@ -361,7 +360,7 @@ class ItemConnectorsForeceiptConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsFsConnectorConfig(BaseModel): +class ConnectorsFsConnectorConfig(BaseModel): config: None connector_name: Literal["fs"] @@ -375,7 +374,7 @@ class ItemConnectorsFsConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGitHubConnectorConfigConfigOAuth(BaseModel): +class ConnectorsGitHubConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -383,12 +382,12 @@ class ItemConnectorsGitHubConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsGitHubConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsGitHubConnectorConfigConfigOAuth +class ConnectorsGitHubConnectorConfigConfig(BaseModel): + oauth: ConnectorsGitHubConnectorConfigConfigOAuth -class ItemConnectorsGitHubConnectorConfig(BaseModel): - config: ItemConnectorsGitHubConnectorConfigConfig +class ConnectorsGitHubConnectorConfig(BaseModel): + config: ConnectorsGitHubConnectorConfigConfig connector_name: Literal["github"] @@ -401,7 +400,7 @@ class ItemConnectorsGitHubConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGongConnectorConfigConfigOAuth(BaseModel): +class ConnectorsGongConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -409,12 +408,12 @@ class ItemConnectorsGongConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsGongConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsGongConnectorConfigConfigOAuth +class ConnectorsGongConnectorConfigConfig(BaseModel): + oauth: ConnectorsGongConnectorConfigConfigOAuth -class ItemConnectorsGongConnectorConfig(BaseModel): - config: ItemConnectorsGongConnectorConfigConfig +class ConnectorsGongConnectorConfig(BaseModel): + config: ConnectorsGongConnectorConfigConfig connector_name: Literal["gong"] @@ -427,57 +426,57 @@ class ItemConnectorsGongConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGoogleConnectorConfigConfigIntegrationsCalendar(BaseModel): +class ConnectorsGoogleConnectorConfigConfigIntegrationsCalendar(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsGoogleConnectorConfigConfigIntegrationsDocs(BaseModel): +class ConnectorsGoogleConnectorConfigConfigIntegrationsDocs(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsGoogleConnectorConfigConfigIntegrationsDrive(BaseModel): +class ConnectorsGoogleConnectorConfigConfigIntegrationsDrive(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsGoogleConnectorConfigConfigIntegrationsGmail(BaseModel): +class ConnectorsGoogleConnectorConfigConfigIntegrationsGmail(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsGoogleConnectorConfigConfigIntegrationsSheets(BaseModel): +class ConnectorsGoogleConnectorConfigConfigIntegrationsSheets(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsGoogleConnectorConfigConfigIntegrationsSlides(BaseModel): +class ConnectorsGoogleConnectorConfigConfigIntegrationsSlides(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsGoogleConnectorConfigConfigIntegrations(BaseModel): - calendar: Optional[ItemConnectorsGoogleConnectorConfigConfigIntegrationsCalendar] = None +class ConnectorsGoogleConnectorConfigConfigIntegrations(BaseModel): + calendar: Optional[ConnectorsGoogleConnectorConfigConfigIntegrationsCalendar] = None - docs: Optional[ItemConnectorsGoogleConnectorConfigConfigIntegrationsDocs] = None + docs: Optional[ConnectorsGoogleConnectorConfigConfigIntegrationsDocs] = None - drive: Optional[ItemConnectorsGoogleConnectorConfigConfigIntegrationsDrive] = None + drive: Optional[ConnectorsGoogleConnectorConfigConfigIntegrationsDrive] = None - gmail: Optional[ItemConnectorsGoogleConnectorConfigConfigIntegrationsGmail] = None + gmail: Optional[ConnectorsGoogleConnectorConfigConfigIntegrationsGmail] = None - sheets: Optional[ItemConnectorsGoogleConnectorConfigConfigIntegrationsSheets] = None + sheets: Optional[ConnectorsGoogleConnectorConfigConfigIntegrationsSheets] = None - slides: Optional[ItemConnectorsGoogleConnectorConfigConfigIntegrationsSlides] = None + slides: Optional[ConnectorsGoogleConnectorConfigConfigIntegrationsSlides] = None -class ItemConnectorsGoogleConnectorConfigConfigOAuth(BaseModel): +class ConnectorsGoogleConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -485,14 +484,14 @@ class ItemConnectorsGoogleConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsGoogleConnectorConfigConfig(BaseModel): - integrations: ItemConnectorsGoogleConnectorConfigConfigIntegrations +class ConnectorsGoogleConnectorConfigConfig(BaseModel): + integrations: ConnectorsGoogleConnectorConfigConfigIntegrations - oauth: ItemConnectorsGoogleConnectorConfigConfigOAuth + oauth: ConnectorsGoogleConnectorConfigConfigOAuth -class ItemConnectorsGoogleConnectorConfig(BaseModel): - config: ItemConnectorsGoogleConnectorConfigConfig +class ConnectorsGoogleConnectorConfig(BaseModel): + config: ConnectorsGoogleConnectorConfigConfig connector_name: Literal["google"] @@ -505,7 +504,7 @@ class ItemConnectorsGoogleConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGreenhouseConnectorConfig(BaseModel): +class ConnectorsGreenhouseConnectorConfig(BaseModel): config: None connector_name: Literal["greenhouse"] @@ -519,12 +518,12 @@ class ItemConnectorsGreenhouseConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsHeronConnectorConfigConfig(BaseModel): +class ConnectorsHeronConnectorConfigConfig(BaseModel): api_key: str = FieldInfo(alias="apiKey") -class ItemConnectorsHeronConnectorConfig(BaseModel): - config: ItemConnectorsHeronConnectorConfigConfig +class ConnectorsHeronConnectorConfig(BaseModel): + config: ConnectorsHeronConnectorConfigConfig connector_name: Literal["heron"] @@ -537,7 +536,7 @@ class ItemConnectorsHeronConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsHubspotConnectorConfigConfigOAuth(BaseModel): +class ConnectorsHubspotConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -545,12 +544,12 @@ class ItemConnectorsHubspotConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsHubspotConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsHubspotConnectorConfigConfigOAuth +class ConnectorsHubspotConnectorConfigConfig(BaseModel): + oauth: ConnectorsHubspotConnectorConfigConfigOAuth -class ItemConnectorsHubspotConnectorConfig(BaseModel): - config: ItemConnectorsHubspotConnectorConfigConfig +class ConnectorsHubspotConnectorConfig(BaseModel): + config: ConnectorsHubspotConnectorConfigConfig connector_name: Literal["hubspot"] @@ -563,7 +562,7 @@ class ItemConnectorsHubspotConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsIntercomConnectorConfigConfigOAuth(BaseModel): +class ConnectorsIntercomConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -571,12 +570,12 @@ class ItemConnectorsIntercomConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsIntercomConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsIntercomConnectorConfigConfigOAuth +class ConnectorsIntercomConnectorConfigConfig(BaseModel): + oauth: ConnectorsIntercomConnectorConfigConfigOAuth -class ItemConnectorsIntercomConnectorConfig(BaseModel): - config: ItemConnectorsIntercomConnectorConfigConfig +class ConnectorsIntercomConnectorConfig(BaseModel): + config: ConnectorsIntercomConnectorConfigConfig connector_name: Literal["intercom"] @@ -589,7 +588,7 @@ class ItemConnectorsIntercomConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsJiraConnectorConfigConfigOAuth(BaseModel): +class ConnectorsJiraConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -597,12 +596,12 @@ class ItemConnectorsJiraConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsJiraConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsJiraConnectorConfigConfigOAuth +class ConnectorsJiraConnectorConfigConfig(BaseModel): + oauth: ConnectorsJiraConnectorConfigConfigOAuth -class ItemConnectorsJiraConnectorConfig(BaseModel): - config: ItemConnectorsJiraConnectorConfigConfig +class ConnectorsJiraConnectorConfig(BaseModel): + config: ConnectorsJiraConnectorConfigConfig connector_name: Literal["jira"] @@ -615,7 +614,7 @@ class ItemConnectorsJiraConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsKustomerConnectorConfigConfigOAuth(BaseModel): +class ConnectorsKustomerConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -623,12 +622,12 @@ class ItemConnectorsKustomerConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsKustomerConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsKustomerConnectorConfigConfigOAuth +class ConnectorsKustomerConnectorConfigConfig(BaseModel): + oauth: ConnectorsKustomerConnectorConfigConfigOAuth -class ItemConnectorsKustomerConnectorConfig(BaseModel): - config: ItemConnectorsKustomerConnectorConfigConfig +class ConnectorsKustomerConnectorConfig(BaseModel): + config: ConnectorsKustomerConnectorConfigConfig connector_name: Literal["kustomer"] @@ -641,7 +640,7 @@ class ItemConnectorsKustomerConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsLeverConnectorConfigConfigOAuth(BaseModel): +class ConnectorsLeverConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -649,14 +648,14 @@ class ItemConnectorsLeverConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsLeverConnectorConfigConfig(BaseModel): +class ConnectorsLeverConnectorConfigConfig(BaseModel): env_name: Literal["sandbox", "production"] = FieldInfo(alias="envName") - oauth: ItemConnectorsLeverConnectorConfigConfigOAuth + oauth: ConnectorsLeverConnectorConfigConfigOAuth -class ItemConnectorsLeverConnectorConfig(BaseModel): - config: ItemConnectorsLeverConnectorConfigConfig +class ConnectorsLeverConnectorConfig(BaseModel): + config: ConnectorsLeverConnectorConfigConfig connector_name: Literal["lever"] @@ -669,7 +668,7 @@ class ItemConnectorsLeverConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsLinearConnectorConfigConfigOAuth(BaseModel): +class ConnectorsLinearConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -677,12 +676,12 @@ class ItemConnectorsLinearConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsLinearConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsLinearConnectorConfigConfigOAuth +class ConnectorsLinearConnectorConfigConfig(BaseModel): + oauth: ConnectorsLinearConnectorConfigConfigOAuth -class ItemConnectorsLinearConnectorConfig(BaseModel): - config: ItemConnectorsLinearConnectorConfigConfig +class ConnectorsLinearConnectorConfig(BaseModel): + config: ConnectorsLinearConnectorConfigConfig connector_name: Literal["linear"] @@ -695,12 +694,12 @@ class ItemConnectorsLinearConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsLunchmoneyConnectorConfigConfig(BaseModel): +class ConnectorsLunchmoneyConnectorConfigConfig(BaseModel): access_token: str = FieldInfo(alias="accessToken") -class ItemConnectorsLunchmoneyConnectorConfig(BaseModel): - config: ItemConnectorsLunchmoneyConnectorConfigConfig +class ConnectorsLunchmoneyConnectorConfig(BaseModel): + config: ConnectorsLunchmoneyConnectorConfigConfig connector_name: Literal["lunchmoney"] @@ -713,20 +712,20 @@ class ItemConnectorsLunchmoneyConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMercuryConnectorConfigConfigOAuth(BaseModel): +class ConnectorsMercuryConnectorConfigConfigOAuth(BaseModel): client_id: str = FieldInfo(alias="clientId") client_secret: str = FieldInfo(alias="clientSecret") -class ItemConnectorsMercuryConnectorConfigConfig(BaseModel): +class ConnectorsMercuryConnectorConfigConfig(BaseModel): apikey_auth: Optional[bool] = FieldInfo(alias="apikeyAuth", default=None) - oauth: Optional[ItemConnectorsMercuryConnectorConfigConfigOAuth] = None + oauth: Optional[ConnectorsMercuryConnectorConfigConfigOAuth] = None -class ItemConnectorsMercuryConnectorConfig(BaseModel): - config: ItemConnectorsMercuryConnectorConfigConfig +class ConnectorsMercuryConnectorConfig(BaseModel): + config: ConnectorsMercuryConnectorConfigConfig connector_name: Literal["mercury"] @@ -739,12 +738,12 @@ class ItemConnectorsMercuryConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMergeConnectorConfigConfig(BaseModel): +class ConnectorsMergeConnectorConfigConfig(BaseModel): api_key: str = FieldInfo(alias="apiKey") -class ItemConnectorsMergeConnectorConfig(BaseModel): - config: ItemConnectorsMergeConnectorConfigConfig +class ConnectorsMergeConnectorConfig(BaseModel): + config: ConnectorsMergeConnectorConfigConfig connector_name: Literal["merge"] @@ -757,33 +756,33 @@ class ItemConnectorsMergeConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsOutlook(BaseModel): +class ConnectorsMicrosoftConnectorConfigConfigIntegrationsOutlook(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsSharepoint(BaseModel): +class ConnectorsMicrosoftConnectorConfigConfigIntegrationsSharepoint(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsTeams(BaseModel): +class ConnectorsMicrosoftConnectorConfigConfigIntegrationsTeams(BaseModel): enabled: Optional[bool] = None scopes: Optional[str] = None -class ItemConnectorsMicrosoftConnectorConfigConfigIntegrations(BaseModel): - outlook: Optional[ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsOutlook] = None +class ConnectorsMicrosoftConnectorConfigConfigIntegrations(BaseModel): + outlook: Optional[ConnectorsMicrosoftConnectorConfigConfigIntegrationsOutlook] = None - sharepoint: Optional[ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsSharepoint] = None + sharepoint: Optional[ConnectorsMicrosoftConnectorConfigConfigIntegrationsSharepoint] = None - teams: Optional[ItemConnectorsMicrosoftConnectorConfigConfigIntegrationsTeams] = None + teams: Optional[ConnectorsMicrosoftConnectorConfigConfigIntegrationsTeams] = None -class ItemConnectorsMicrosoftConnectorConfigConfigOAuth(BaseModel): +class ConnectorsMicrosoftConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -791,14 +790,14 @@ class ItemConnectorsMicrosoftConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsMicrosoftConnectorConfigConfig(BaseModel): - integrations: ItemConnectorsMicrosoftConnectorConfigConfigIntegrations +class ConnectorsMicrosoftConnectorConfigConfig(BaseModel): + integrations: ConnectorsMicrosoftConnectorConfigConfigIntegrations - oauth: ItemConnectorsMicrosoftConnectorConfigConfigOAuth + oauth: ConnectorsMicrosoftConnectorConfigConfigOAuth -class ItemConnectorsMicrosoftConnectorConfig(BaseModel): - config: ItemConnectorsMicrosoftConnectorConfigConfig +class ConnectorsMicrosoftConnectorConfig(BaseModel): + config: ConnectorsMicrosoftConnectorConfigConfig connector_name: Literal["microsoft"] @@ -811,7 +810,7 @@ class ItemConnectorsMicrosoftConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMongoDBConnectorConfig(BaseModel): +class ConnectorsMongoDBConnectorConfig(BaseModel): config: None connector_name: Literal["mongodb"] @@ -825,12 +824,12 @@ class ItemConnectorsMongoDBConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMootaConnectorConfigConfig(BaseModel): +class ConnectorsMootaConnectorConfigConfig(BaseModel): token: str -class ItemConnectorsMootaConnectorConfig(BaseModel): - config: ItemConnectorsMootaConnectorConfigConfig +class ConnectorsMootaConnectorConfig(BaseModel): + config: ConnectorsMootaConnectorConfigConfig connector_name: Literal["moota"] @@ -843,7 +842,7 @@ class ItemConnectorsMootaConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsOnebrickConnectorConfigConfig(BaseModel): +class ConnectorsOnebrickConnectorConfigConfig(BaseModel): client_id: str = FieldInfo(alias="clientId") client_secret: str = FieldInfo(alias="clientSecret") @@ -857,8 +856,8 @@ class ItemConnectorsOnebrickConnectorConfigConfig(BaseModel): redirect_url: Optional[str] = FieldInfo(alias="redirectUrl", default=None) -class ItemConnectorsOnebrickConnectorConfig(BaseModel): - config: ItemConnectorsOnebrickConnectorConfigConfig +class ConnectorsOnebrickConnectorConfig(BaseModel): + config: ConnectorsOnebrickConnectorConfigConfig connector_name: Literal["onebrick"] @@ -871,7 +870,7 @@ class ItemConnectorsOnebrickConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsOutreachConnectorConfigConfigOAuth(BaseModel): +class ConnectorsOutreachConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -879,12 +878,12 @@ class ItemConnectorsOutreachConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsOutreachConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsOutreachConnectorConfigConfigOAuth +class ConnectorsOutreachConnectorConfigConfig(BaseModel): + oauth: ConnectorsOutreachConnectorConfigConfigOAuth -class ItemConnectorsOutreachConnectorConfig(BaseModel): - config: ItemConnectorsOutreachConnectorConfigConfig +class ConnectorsOutreachConnectorConfig(BaseModel): + config: ConnectorsOutreachConnectorConfigConfig connector_name: Literal["outreach"] @@ -897,7 +896,7 @@ class ItemConnectorsOutreachConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsPipedriveConnectorConfigConfigOAuth(BaseModel): +class ConnectorsPipedriveConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -905,12 +904,12 @@ class ItemConnectorsPipedriveConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsPipedriveConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsPipedriveConnectorConfigConfigOAuth +class ConnectorsPipedriveConnectorConfigConfig(BaseModel): + oauth: ConnectorsPipedriveConnectorConfigConfigOAuth -class ItemConnectorsPipedriveConnectorConfig(BaseModel): - config: ItemConnectorsPipedriveConnectorConfigConfig +class ConnectorsPipedriveConnectorConfig(BaseModel): + config: ConnectorsPipedriveConnectorConfigConfig connector_name: Literal["pipedrive"] @@ -923,13 +922,13 @@ class ItemConnectorsPipedriveConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsPlaidConnectorConfigConfigCredentials(BaseModel): +class ConnectorsPlaidConnectorConfigConfigCredentials(BaseModel): client_id: str = FieldInfo(alias="clientId") client_secret: str = FieldInfo(alias="clientSecret") -class ItemConnectorsPlaidConnectorConfigConfig(BaseModel): +class ConnectorsPlaidConnectorConfigConfig(BaseModel): client_name: str = FieldInfo(alias="clientName") country_codes: List[ @@ -962,11 +961,11 @@ class ItemConnectorsPlaidConnectorConfigConfig(BaseModel): ] ] - credentials: Optional[ItemConnectorsPlaidConnectorConfigConfigCredentials] = None + credentials: Optional[ConnectorsPlaidConnectorConfigConfigCredentials] = None -class ItemConnectorsPlaidConnectorConfig(BaseModel): - config: ItemConnectorsPlaidConnectorConfigConfig +class ConnectorsPlaidConnectorConfig(BaseModel): + config: ConnectorsPlaidConnectorConfigConfig connector_name: Literal["plaid"] @@ -979,7 +978,7 @@ class ItemConnectorsPlaidConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsPostgresConnectorConfig(BaseModel): +class ConnectorsPostgresConnectorConfig(BaseModel): config: None connector_name: Literal["postgres"] @@ -993,7 +992,7 @@ class ItemConnectorsPostgresConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsQboConnectorConfigConfigOAuth(BaseModel): +class ConnectorsQboConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -1001,18 +1000,18 @@ class ItemConnectorsQboConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsQboConnectorConfigConfig(BaseModel): +class ConnectorsQboConnectorConfigConfig(BaseModel): env_name: Literal["sandbox", "production"] = FieldInfo(alias="envName") - oauth: ItemConnectorsQboConnectorConfigConfigOAuth + oauth: ConnectorsQboConnectorConfigConfigOAuth url: Optional[str] = None verifier_token: Optional[str] = FieldInfo(alias="verifierToken", default=None) -class ItemConnectorsQboConnectorConfig(BaseModel): - config: ItemConnectorsQboConnectorConfigConfig +class ConnectorsQboConnectorConfig(BaseModel): + config: ConnectorsQboConnectorConfigConfig connector_name: Literal["qbo"] @@ -1025,18 +1024,18 @@ class ItemConnectorsQboConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsRampConnectorConfigConfigOAuth(BaseModel): +class ConnectorsRampConnectorConfigConfigOAuth(BaseModel): client_id: str = FieldInfo(alias="clientId") client_secret: str = FieldInfo(alias="clientSecret") -class ItemConnectorsRampConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsRampConnectorConfigConfigOAuth +class ConnectorsRampConnectorConfigConfig(BaseModel): + oauth: ConnectorsRampConnectorConfigConfigOAuth -class ItemConnectorsRampConnectorConfig(BaseModel): - config: ItemConnectorsRampConnectorConfigConfig +class ConnectorsRampConnectorConfig(BaseModel): + config: ConnectorsRampConnectorConfigConfig connector_name: Literal["ramp"] @@ -1049,14 +1048,14 @@ class ItemConnectorsRampConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsRevertConnectorConfigConfig(BaseModel): +class ConnectorsRevertConnectorConfigConfig(BaseModel): api_token: str api_version: Optional[str] = None -class ItemConnectorsRevertConnectorConfig(BaseModel): - config: ItemConnectorsRevertConnectorConfigConfig +class ConnectorsRevertConnectorConfig(BaseModel): + config: ConnectorsRevertConnectorConfigConfig connector_name: Literal["revert"] @@ -1069,7 +1068,7 @@ class ItemConnectorsRevertConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSalesforceConnectorConfigConfigOAuth(BaseModel): +class ConnectorsSalesforceConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -1077,12 +1076,12 @@ class ItemConnectorsSalesforceConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsSalesforceConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsSalesforceConnectorConfigConfigOAuth +class ConnectorsSalesforceConnectorConfigConfig(BaseModel): + oauth: ConnectorsSalesforceConnectorConfigConfigOAuth -class ItemConnectorsSalesforceConnectorConfig(BaseModel): - config: ItemConnectorsSalesforceConnectorConfigConfig +class ConnectorsSalesforceConnectorConfig(BaseModel): + config: ConnectorsSalesforceConnectorConfigConfig connector_name: Literal["salesforce"] @@ -1095,7 +1094,7 @@ class ItemConnectorsSalesforceConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSalesloftConnectorConfigConfigOAuth(BaseModel): +class ConnectorsSalesloftConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -1103,12 +1102,12 @@ class ItemConnectorsSalesloftConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsSalesloftConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsSalesloftConnectorConfigConfigOAuth +class ConnectorsSalesloftConnectorConfigConfig(BaseModel): + oauth: ConnectorsSalesloftConnectorConfigConfigOAuth -class ItemConnectorsSalesloftConnectorConfig(BaseModel): - config: ItemConnectorsSalesloftConnectorConfigConfig +class ConnectorsSalesloftConnectorConfig(BaseModel): + config: ConnectorsSalesloftConnectorConfigConfig connector_name: Literal["salesloft"] @@ -1121,7 +1120,7 @@ class ItemConnectorsSalesloftConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSaltedgeConnectorConfigConfig(BaseModel): +class ConnectorsSaltedgeConnectorConfigConfig(BaseModel): app_id: str = FieldInfo(alias="appId") secret: str @@ -1129,8 +1128,8 @@ class ItemConnectorsSaltedgeConnectorConfigConfig(BaseModel): url: Optional[str] = None -class ItemConnectorsSaltedgeConnectorConfig(BaseModel): - config: ItemConnectorsSaltedgeConnectorConfigConfig +class ConnectorsSaltedgeConnectorConfig(BaseModel): + config: ConnectorsSaltedgeConnectorConfigConfig connector_name: Literal["saltedge"] @@ -1143,7 +1142,7 @@ class ItemConnectorsSaltedgeConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSlackConnectorConfigConfigOAuth(BaseModel): +class ConnectorsSlackConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -1151,12 +1150,12 @@ class ItemConnectorsSlackConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsSlackConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsSlackConnectorConfigConfigOAuth +class ConnectorsSlackConnectorConfigConfig(BaseModel): + oauth: ConnectorsSlackConnectorConfigConfigOAuth -class ItemConnectorsSlackConnectorConfig(BaseModel): - config: ItemConnectorsSlackConnectorConfigConfig +class ConnectorsSlackConnectorConfig(BaseModel): + config: ConnectorsSlackConnectorConfigConfig connector_name: Literal["slack"] @@ -1169,7 +1168,7 @@ class ItemConnectorsSlackConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSplitwiseConnectorConfig(BaseModel): +class ConnectorsSplitwiseConnectorConfig(BaseModel): config: None connector_name: Literal["splitwise"] @@ -1183,7 +1182,7 @@ class ItemConnectorsSplitwiseConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSpreadsheetConnectorConfigConfig(BaseModel): +class ConnectorsSpreadsheetConnectorConfigConfig(BaseModel): enabled_presets: Optional[ List[ Literal[ @@ -1207,12 +1206,12 @@ class ItemConnectorsSpreadsheetConnectorConfigConfig(BaseModel): source_providers: Optional[List[object]] = FieldInfo(alias="sourceProviders", default=None) -class ItemConnectorsSpreadsheetConnectorConfig(BaseModel): +class ConnectorsSpreadsheetConnectorConfig(BaseModel): connector_name: Literal["spreadsheet"] id: Optional[str] = None - config: Optional[ItemConnectorsSpreadsheetConnectorConfigConfig] = None + config: Optional[ConnectorsSpreadsheetConnectorConfigConfig] = None created_at: Optional[datetime] = None @@ -1221,20 +1220,20 @@ class ItemConnectorsSpreadsheetConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsStripeConnectorConfigConfigOAuth(BaseModel): +class ConnectorsStripeConnectorConfigConfigOAuth(BaseModel): client_id: str = FieldInfo(alias="clientId") client_secret: str = FieldInfo(alias="clientSecret") -class ItemConnectorsStripeConnectorConfigConfig(BaseModel): +class ConnectorsStripeConnectorConfigConfig(BaseModel): apikey_auth: Optional[bool] = FieldInfo(alias="apikeyAuth", default=None) - oauth: Optional[ItemConnectorsStripeConnectorConfigConfigOAuth] = None + oauth: Optional[ConnectorsStripeConnectorConfigConfigOAuth] = None -class ItemConnectorsStripeConnectorConfig(BaseModel): - config: ItemConnectorsStripeConnectorConfigConfig +class ConnectorsStripeConnectorConfig(BaseModel): + config: ConnectorsStripeConnectorConfigConfig connector_name: Literal["stripe"] @@ -1247,14 +1246,14 @@ class ItemConnectorsStripeConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsTellerConnectorConfigConfig(BaseModel): +class ConnectorsTellerConnectorConfigConfig(BaseModel): application_id: str = FieldInfo(alias="applicationId") token: Optional[str] = None -class ItemConnectorsTellerConnectorConfig(BaseModel): - config: ItemConnectorsTellerConnectorConfigConfig +class ConnectorsTellerConnectorConfig(BaseModel): + config: ConnectorsTellerConnectorConfigConfig connector_name: Literal["teller"] @@ -1267,7 +1266,7 @@ class ItemConnectorsTellerConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsTogglConnectorConfig(BaseModel): +class ConnectorsTogglConnectorConfig(BaseModel): config: None connector_name: Literal["toggl"] @@ -1281,7 +1280,7 @@ class ItemConnectorsTogglConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsTwentyConnectorConfig(BaseModel): +class ConnectorsTwentyConnectorConfig(BaseModel): config: None connector_name: Literal["twenty"] @@ -1295,22 +1294,22 @@ class ItemConnectorsTwentyConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsVenmoConnectorConfigConfigProxy(BaseModel): +class ConnectorsVenmoConnectorConfigConfigProxy(BaseModel): cert: str url: str -class ItemConnectorsVenmoConnectorConfigConfig(BaseModel): - proxy: Optional[ItemConnectorsVenmoConnectorConfigConfigProxy] = None +class ConnectorsVenmoConnectorConfigConfig(BaseModel): + proxy: Optional[ConnectorsVenmoConnectorConfigConfigProxy] = None v1_base_url: Optional[str] = FieldInfo(alias="v1BaseURL", default=None) v5_base_url: Optional[str] = FieldInfo(alias="v5BaseURL", default=None) -class ItemConnectorsVenmoConnectorConfig(BaseModel): - config: ItemConnectorsVenmoConnectorConfigConfig +class ConnectorsVenmoConnectorConfig(BaseModel): + config: ConnectorsVenmoConnectorConfigConfig connector_name: Literal["venmo"] @@ -1323,7 +1322,7 @@ class ItemConnectorsVenmoConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsWebhookConnectorConfig(BaseModel): +class ConnectorsWebhookConnectorConfig(BaseModel): config: None connector_name: Literal["webhook"] @@ -1337,7 +1336,7 @@ class ItemConnectorsWebhookConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsWiseConnectorConfig(BaseModel): +class ConnectorsWiseConnectorConfig(BaseModel): config: None connector_name: Literal["wise"] @@ -1351,7 +1350,7 @@ class ItemConnectorsWiseConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsXeroConnectorConfigConfigOAuth(BaseModel): +class ConnectorsXeroConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -1359,12 +1358,12 @@ class ItemConnectorsXeroConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsXeroConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsXeroConnectorConfigConfigOAuth +class ConnectorsXeroConnectorConfigConfig(BaseModel): + oauth: ConnectorsXeroConnectorConfigConfigOAuth -class ItemConnectorsXeroConnectorConfig(BaseModel): - config: ItemConnectorsXeroConnectorConfigConfig +class ConnectorsXeroConnectorConfig(BaseModel): + config: ConnectorsXeroConnectorConfigConfig connector_name: Literal["xero"] @@ -1377,13 +1376,13 @@ class ItemConnectorsXeroConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsYodleeConnectorConfigConfigProxy(BaseModel): +class ConnectorsYodleeConnectorConfigConfigProxy(BaseModel): cert: str url: str -class ItemConnectorsYodleeConnectorConfigConfig(BaseModel): +class ConnectorsYodleeConnectorConfigConfig(BaseModel): admin_login_name: str = FieldInfo(alias="adminLoginName") client_id: str = FieldInfo(alias="clientId") @@ -1392,13 +1391,13 @@ class ItemConnectorsYodleeConnectorConfigConfig(BaseModel): env_name: Literal["sandbox", "development", "production"] = FieldInfo(alias="envName") - proxy: Optional[ItemConnectorsYodleeConnectorConfigConfigProxy] = None + proxy: Optional[ConnectorsYodleeConnectorConfigConfigProxy] = None sandbox_login_name: Optional[str] = FieldInfo(alias="sandboxLoginName", default=None) -class ItemConnectorsYodleeConnectorConfig(BaseModel): - config: ItemConnectorsYodleeConnectorConfigConfig +class ConnectorsYodleeConnectorConfig(BaseModel): + config: ConnectorsYodleeConnectorConfigConfig connector_name: Literal["yodlee"] @@ -1411,7 +1410,7 @@ class ItemConnectorsYodleeConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsZohodeskConnectorConfigConfigOAuth(BaseModel): +class ConnectorsZohodeskConnectorConfigConfigOAuth(BaseModel): client_id: str client_secret: str @@ -1419,12 +1418,12 @@ class ItemConnectorsZohodeskConnectorConfigConfigOAuth(BaseModel): scopes: Optional[str] = None -class ItemConnectorsZohodeskConnectorConfigConfig(BaseModel): - oauth: ItemConnectorsZohodeskConnectorConfigConfigOAuth +class ConnectorsZohodeskConnectorConfigConfig(BaseModel): + oauth: ConnectorsZohodeskConnectorConfigConfigOAuth -class ItemConnectorsZohodeskConnectorConfig(BaseModel): - config: ItemConnectorsZohodeskConnectorConfigConfig +class ConnectorsZohodeskConnectorConfig(BaseModel): + config: ConnectorsZohodeskConnectorConfigConfig connector_name: Literal["zohodesk"] @@ -1437,7 +1436,7 @@ class ItemConnectorsZohodeskConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGoogledriveConnectorConfigConfig(BaseModel): +class ConnectorsGoogledriveConnectorConfigConfig(BaseModel): client_id: str client_secret: str @@ -1445,8 +1444,8 @@ class ItemConnectorsGoogledriveConnectorConfigConfig(BaseModel): scopes: Optional[List[str]] = None -class ItemConnectorsGoogledriveConnectorConfig(BaseModel): - config: ItemConnectorsGoogledriveConnectorConfigConfig +class ConnectorsGoogledriveConnectorConfig(BaseModel): + config: ConnectorsGoogledriveConnectorConfigConfig connector_name: Literal["googledrive"] @@ -1459,70 +1458,60 @@ class ItemConnectorsGoogledriveConnectorConfig(BaseModel): updated_at: Optional[datetime] = None -Item: TypeAlias = Union[ - ItemConnectorsAircallConnectorConfig, - ItemConnectorsAirtableConnectorConfig, - ItemConnectorsApolloConnectorConfig, - ItemConnectorsBeancountConnectorConfig, - ItemConnectorsBrexConnectorConfig, - ItemConnectorsCodaConnectorConfig, - ItemConnectorsConfluenceConnectorConfig, - ItemConnectorsDebugConnectorConfig, - ItemConnectorsDiscordConnectorConfig, - ItemConnectorsFinchConnectorConfig, - ItemConnectorsFirebaseConnectorConfig, - ItemConnectorsForeceiptConnectorConfig, - ItemConnectorsFsConnectorConfig, - ItemConnectorsGitHubConnectorConfig, - ItemConnectorsGongConnectorConfig, - ItemConnectorsGoogleConnectorConfig, - ItemConnectorsGreenhouseConnectorConfig, - ItemConnectorsHeronConnectorConfig, - ItemConnectorsHubspotConnectorConfig, - ItemConnectorsIntercomConnectorConfig, - ItemConnectorsJiraConnectorConfig, - ItemConnectorsKustomerConnectorConfig, - ItemConnectorsLeverConnectorConfig, - ItemConnectorsLinearConnectorConfig, - ItemConnectorsLunchmoneyConnectorConfig, - ItemConnectorsMercuryConnectorConfig, - ItemConnectorsMergeConnectorConfig, - ItemConnectorsMicrosoftConnectorConfig, - ItemConnectorsMongoDBConnectorConfig, - ItemConnectorsMootaConnectorConfig, - ItemConnectorsOnebrickConnectorConfig, - ItemConnectorsOutreachConnectorConfig, - ItemConnectorsPipedriveConnectorConfig, - ItemConnectorsPlaidConnectorConfig, - ItemConnectorsPostgresConnectorConfig, - ItemConnectorsQboConnectorConfig, - ItemConnectorsRampConnectorConfig, - ItemConnectorsRevertConnectorConfig, - ItemConnectorsSalesforceConnectorConfig, - ItemConnectorsSalesloftConnectorConfig, - ItemConnectorsSaltedgeConnectorConfig, - ItemConnectorsSlackConnectorConfig, - ItemConnectorsSplitwiseConnectorConfig, - ItemConnectorsSpreadsheetConnectorConfig, - ItemConnectorsStripeConnectorConfig, - ItemConnectorsTellerConnectorConfig, - ItemConnectorsTogglConnectorConfig, - ItemConnectorsTwentyConnectorConfig, - ItemConnectorsVenmoConnectorConfig, - ItemConnectorsWebhookConnectorConfig, - ItemConnectorsWiseConnectorConfig, - ItemConnectorsXeroConnectorConfig, - ItemConnectorsYodleeConnectorConfig, - ItemConnectorsZohodeskConnectorConfig, - ItemConnectorsGoogledriveConnectorConfig, +ListConnectionConfigsResponse: TypeAlias = Union[ + ConnectorsAircallConnectorConfig, + ConnectorsAirtableConnectorConfig, + ConnectorsApolloConnectorConfig, + ConnectorsBeancountConnectorConfig, + ConnectorsBrexConnectorConfig, + ConnectorsCodaConnectorConfig, + ConnectorsConfluenceConnectorConfig, + ConnectorsDebugConnectorConfig, + ConnectorsDiscordConnectorConfig, + ConnectorsFinchConnectorConfig, + ConnectorsFirebaseConnectorConfig, + ConnectorsForeceiptConnectorConfig, + ConnectorsFsConnectorConfig, + ConnectorsGitHubConnectorConfig, + ConnectorsGongConnectorConfig, + ConnectorsGoogleConnectorConfig, + ConnectorsGreenhouseConnectorConfig, + ConnectorsHeronConnectorConfig, + ConnectorsHubspotConnectorConfig, + ConnectorsIntercomConnectorConfig, + ConnectorsJiraConnectorConfig, + ConnectorsKustomerConnectorConfig, + ConnectorsLeverConnectorConfig, + ConnectorsLinearConnectorConfig, + ConnectorsLunchmoneyConnectorConfig, + ConnectorsMercuryConnectorConfig, + ConnectorsMergeConnectorConfig, + ConnectorsMicrosoftConnectorConfig, + ConnectorsMongoDBConnectorConfig, + ConnectorsMootaConnectorConfig, + ConnectorsOnebrickConnectorConfig, + ConnectorsOutreachConnectorConfig, + ConnectorsPipedriveConnectorConfig, + ConnectorsPlaidConnectorConfig, + ConnectorsPostgresConnectorConfig, + ConnectorsQboConnectorConfig, + ConnectorsRampConnectorConfig, + ConnectorsRevertConnectorConfig, + ConnectorsSalesforceConnectorConfig, + ConnectorsSalesloftConnectorConfig, + ConnectorsSaltedgeConnectorConfig, + ConnectorsSlackConnectorConfig, + ConnectorsSplitwiseConnectorConfig, + ConnectorsSpreadsheetConnectorConfig, + ConnectorsStripeConnectorConfig, + ConnectorsTellerConnectorConfig, + ConnectorsTogglConnectorConfig, + ConnectorsTwentyConnectorConfig, + ConnectorsVenmoConnectorConfig, + ConnectorsWebhookConnectorConfig, + ConnectorsWiseConnectorConfig, + ConnectorsXeroConnectorConfig, + ConnectorsYodleeConnectorConfig, + ConnectorsZohodeskConnectorConfig, + ConnectorsGoogledriveConnectorConfig, ] - - -class ListConnectionConfigsResponse(BaseModel): - items: List[Item] - - limit: int - - offset: int - - total: float diff --git a/src/openint/types/list_events_response.py b/src/openint/types/list_events_response.py index 9819f5d..701906b 100644 --- a/src/openint/types/list_events_response.py +++ b/src/openint/types/list_events_response.py @@ -4,10 +4,10 @@ from .._models import BaseModel -__all__ = ["ListEventsResponse", "Item"] +__all__ = ["ListEventsResponse"] -class Item(BaseModel): +class ListEventsResponse(BaseModel): id: str customer_id: Optional[str] = None @@ -25,13 +25,3 @@ class Item(BaseModel): user_id: Optional[str] = None v: Optional[str] = None - - -class ListEventsResponse(BaseModel): - items: List[Item] - - limit: int - - offset: int - - total: float diff --git a/tests/api_resources/test_client.py b/tests/api_resources/test_client.py index 3785ad7..7cc8e7f 100644 --- a/tests/api_resources/test_client.py +++ b/tests/api_resources/test_client.py @@ -18,6 +18,7 @@ ListConnectionsResponse, ListConnectionConfigsResponse, ) +from openint.pagination import SyncOffsetPagination, AsyncOffsetPagination base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -205,7 +206,7 @@ def test_streaming_response_get_connection(self, client: Openint) -> None: @parametrize def test_method_list_connection_configs(self, client: Openint) -> None: client_ = client.list_connection_configs() - assert_matches_type(ListConnectionConfigsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionConfigsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize @@ -216,7 +217,7 @@ def test_method_list_connection_configs_with_all_params(self, client: Openint) - limit=1, offset=0, ) - assert_matches_type(ListConnectionConfigsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionConfigsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize @@ -226,7 +227,7 @@ def test_raw_response_list_connection_configs(self, client: Openint) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" client_ = response.parse() - assert_matches_type(ListConnectionConfigsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionConfigsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize @@ -236,7 +237,7 @@ def test_streaming_response_list_connection_configs(self, client: Openint) -> No assert response.http_request.headers.get("X-Stainless-Lang") == "python" client_ = response.parse() - assert_matches_type(ListConnectionConfigsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionConfigsResponse], client_, path=["response"]) assert cast(Any, response.is_closed) is True @@ -297,7 +298,7 @@ def test_path_params_list_connections(self, client: Openint) -> None: @parametrize def test_method_list_events(self, client: Openint) -> None: client_ = client.list_events() - assert_matches_type(ListEventsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListEventsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize @@ -306,7 +307,7 @@ def test_method_list_events_with_all_params(self, client: Openint) -> None: limit=1, offset=0, ) - assert_matches_type(ListEventsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListEventsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize @@ -316,7 +317,7 @@ def test_raw_response_list_events(self, client: Openint) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" client_ = response.parse() - assert_matches_type(ListEventsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListEventsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize @@ -326,7 +327,7 @@ def test_streaming_response_list_events(self, client: Openint) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" client_ = response.parse() - assert_matches_type(ListEventsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListEventsResponse], client_, path=["response"]) assert cast(Any, response.is_closed) is True @@ -514,7 +515,7 @@ async def test_streaming_response_get_connection(self, async_client: AsyncOpenin @parametrize async def test_method_list_connection_configs(self, async_client: AsyncOpenint) -> None: client = await async_client.list_connection_configs() - assert_matches_type(ListConnectionConfigsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionConfigsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize @@ -525,7 +526,7 @@ async def test_method_list_connection_configs_with_all_params(self, async_client limit=1, offset=0, ) - assert_matches_type(ListConnectionConfigsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionConfigsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize @@ -535,7 +536,7 @@ async def test_raw_response_list_connection_configs(self, async_client: AsyncOpe assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" client = await response.parse() - assert_matches_type(ListConnectionConfigsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionConfigsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize @@ -545,7 +546,7 @@ async def test_streaming_response_list_connection_configs(self, async_client: As assert response.http_request.headers.get("X-Stainless-Lang") == "python" client = await response.parse() - assert_matches_type(ListConnectionConfigsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionConfigsResponse], client, path=["response"]) assert cast(Any, response.is_closed) is True @@ -606,7 +607,7 @@ async def test_path_params_list_connections(self, async_client: AsyncOpenint) -> @parametrize async def test_method_list_events(self, async_client: AsyncOpenint) -> None: client = await async_client.list_events() - assert_matches_type(ListEventsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListEventsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize @@ -615,7 +616,7 @@ async def test_method_list_events_with_all_params(self, async_client: AsyncOpeni limit=1, offset=0, ) - assert_matches_type(ListEventsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListEventsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize @@ -625,7 +626,7 @@ async def test_raw_response_list_events(self, async_client: AsyncOpenint) -> Non assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" client = await response.parse() - assert_matches_type(ListEventsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListEventsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize @@ -635,6 +636,6 @@ async def test_streaming_response_list_events(self, async_client: AsyncOpenint) assert response.http_request.headers.get("X-Stainless-Lang") == "python" client = await response.parse() - assert_matches_type(ListEventsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListEventsResponse], client, path=["response"]) assert cast(Any, response.is_closed) is True From 035fbead3a022304829924c9996f434a7cd4a593 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:53:40 +0000 Subject: [PATCH 6/9] feat(api): manual updates (#11) --- README.md | 22 +- api.md | 4 +- src/openint/_client.py | 324 ++-- .../types/client_get_connection_params.py | 69 +- .../types/client_list_connections_params.py | 69 +- src/openint/types/get_connection_response.py | 1344 ++++++++--------- tests/api_resources/test_client.py | 124 +- tests/test_client.py | 67 +- 8 files changed, 980 insertions(+), 1043 deletions(-) diff --git a/README.md b/README.md index ebb01d3..7bf28b8 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ client = Openint( api_key=os.environ.get("OPENINT_API_KEY"), # This is the default and can be omitted ) -response = client.get_connection() -print(response.items) +page = client.list_connections() +print(page.items) ``` While you can provide an `api_key` keyword argument, @@ -55,8 +55,8 @@ client = AsyncOpenint( async def main() -> None: - response = await client.get_connection() - print(response.items) + page = await client.list_connections() + print(page.items) asyncio.run(main()) @@ -89,7 +89,7 @@ from openint import Openint client = Openint() try: - client.get_connection() + client.list_connections() except openint.APIConnectionError as e: print("The server could not be reached") print(e.__cause__) # an underlying Exception, likely raised within httpx. @@ -132,7 +132,7 @@ client = Openint( ) # Or, configure per-request: -client.with_options(max_retries=5).get_connection() +client.with_options(max_retries=5).list_connections() ``` ### Timeouts @@ -155,7 +155,7 @@ client = Openint( ) # Override per-request: -client.with_options(timeout=5.0).get_connection() +client.with_options(timeout=5.0).list_connections() ``` On timeout, an `APITimeoutError` is thrown. @@ -196,11 +196,11 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to from openint import Openint client = Openint() -response = client.with_raw_response.get_connection() +response = client.with_raw_response.list_connections() print(response.headers.get('X-My-Header')) -client = response.parse() # get the object that `get_connection()` would have returned -print(client.items) +client = response.parse() # get the object that `list_connections()` would have returned +print(client) ``` These methods return an [`APIResponse`](https://github.com/openintegrations/python-sdk/tree/main/src/openint/_response.py) object. @@ -214,7 +214,7 @@ The above interface eagerly reads the full response body when you make the reque To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods. ```python -with client.with_streaming_response.get_connection() as response: +with client.with_streaming_response.list_connections() as response: print(response.headers.get("X-My-Header")) for line in response.iter_lines(): diff --git a/api.md b/api.md index b495a82..1c18443 100644 --- a/api.md +++ b/api.md @@ -19,7 +19,7 @@ Methods: - client.check_connection(id) -> CheckConnectionResponse - client.create_magic_link(\*\*params) -> CreateMagicLinkResponse - client.create_token(\*\*params) -> CreateTokenResponse -- client.get_connection(\*\*params) -> GetConnectionResponse +- client.get_connection(id, \*\*params) -> GetConnectionResponse - client.list_connection_configs(\*\*params) -> SyncOffsetPagination[ListConnectionConfigsResponse] -- client.list_connections(id, \*\*params) -> ListConnectionsResponse +- client.list_connections(\*\*params) -> SyncOffsetPagination[ListConnectionsResponse] - client.list_events(\*\*params) -> SyncOffsetPagination[ListEventsResponse] diff --git a/src/openint/_client.py b/src/openint/_client.py index 1950a4e..1d142e0 100644 --- a/src/openint/_client.py +++ b/src/openint/_client.py @@ -429,9 +429,65 @@ def create_token( ) def get_connection( + self, + id: str, + *, + expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, + include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, + refresh_policy: Literal["none", "force", "auto"] | 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, + ) -> GetConnectionResponse: + """ + Get details of a specific connection + + Args: + include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets + + 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 + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not id: + raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") + return cast( + GetConnectionResponse, + self.get( + f"/connection/{id}", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "expand": expand, + "include_secrets": include_secrets, + "refresh_policy": refresh_policy, + }, + client_get_connection_params.ClientGetConnectionParams, + ), + ), + cast_to=cast( + Any, GetConnectionResponse + ), # Union types cannot be passed in as arguments in the type system + ), + ) + + def list_connection_configs( self, *, - connector_config_id: str | NotGiven = NOT_GIVEN, connector_name: Literal[ "aircall", "airtable", @@ -488,9 +544,7 @@ def get_connection( "googledrive", ] | NotGiven = NOT_GIVEN, - customer_id: str | NotGiven = NOT_GIVEN, expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, - include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -499,15 +553,13 @@ def get_connection( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> GetConnectionResponse: + ) -> SyncOffsetPagination[ListConnectionConfigsResponse]: """ - List all connections with optional filtering + List all connector configurations with optional filtering Args: connector_name: The name of the connector - include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets - extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -516,8 +568,9 @@ def get_connection( timeout: Override the client-level default timeout for this request, in seconds """ - return self.get( - "/connection", + return self.get_api_list( + "/connector-config", + page=SyncOffsetPagination[ListConnectionConfigsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -525,23 +578,23 @@ def get_connection( timeout=timeout, query=maybe_transform( { - "connector_config_id": connector_config_id, "connector_name": connector_name, - "customer_id": customer_id, "expand": expand, - "include_secrets": include_secrets, "limit": limit, "offset": offset, }, - client_get_connection_params.ClientGetConnectionParams, + client_list_connection_configs_params.ClientListConnectionConfigsParams, ), ), - cast_to=GetConnectionResponse, + model=cast( + Any, ListConnectionConfigsResponse + ), # Union types cannot be passed in as arguments in the type system ) - def list_connection_configs( + def list_connections( self, *, + connector_config_id: str | NotGiven = NOT_GIVEN, connector_name: Literal[ "aircall", "airtable", @@ -598,7 +651,9 @@ def list_connection_configs( "googledrive", ] | NotGiven = NOT_GIVEN, + customer_id: str | NotGiven = NOT_GIVEN, expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, + include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -607,13 +662,15 @@ def list_connection_configs( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> SyncOffsetPagination[ListConnectionConfigsResponse]: + ) -> SyncOffsetPagination[ListConnectionsResponse]: """ - List all connector configurations with optional filtering + List all connections with optional filtering Args: connector_name: The name of the connector + include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -623,8 +680,8 @@ def list_connection_configs( timeout: Override the client-level default timeout for this request, in seconds """ return self.get_api_list( - "/connector-config", - page=SyncOffsetPagination[ListConnectionConfigsResponse], + "/connection", + page=SyncOffsetPagination[ListConnectionsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -632,74 +689,18 @@ def list_connection_configs( timeout=timeout, query=maybe_transform( { + "connector_config_id": connector_config_id, "connector_name": connector_name, + "customer_id": customer_id, "expand": expand, + "include_secrets": include_secrets, "limit": limit, "offset": offset, }, - 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 - ) - - def list_connections( - self, - id: str, - *, - expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, - include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, - refresh_policy: Literal["none", "force", "auto"] | 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, - ) -> ListConnectionsResponse: - """ - Get details of a specific connection - - Args: - include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets - - 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 - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not id: - raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") - return cast( - ListConnectionsResponse, - self.get( - f"/connection/{id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "expand": expand, - "include_secrets": include_secrets, - "refresh_policy": refresh_policy, - }, - client_list_connections_params.ClientListConnectionsParams, - ), - ), - cast_to=cast( - Any, ListConnectionsResponse - ), # 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_events( @@ -1144,9 +1145,65 @@ async def create_token( ) async def get_connection( + self, + id: str, + *, + expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, + include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, + refresh_policy: Literal["none", "force", "auto"] | 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, + ) -> GetConnectionResponse: + """ + Get details of a specific connection + + Args: + include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets + + 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 + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not id: + raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") + return cast( + GetConnectionResponse, + await self.get( + f"/connection/{id}", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "expand": expand, + "include_secrets": include_secrets, + "refresh_policy": refresh_policy, + }, + client_get_connection_params.ClientGetConnectionParams, + ), + ), + cast_to=cast( + Any, GetConnectionResponse + ), # Union types cannot be passed in as arguments in the type system + ), + ) + + def list_connection_configs( self, *, - connector_config_id: str | NotGiven = NOT_GIVEN, connector_name: Literal[ "aircall", "airtable", @@ -1203,9 +1260,7 @@ async def get_connection( "googledrive", ] | NotGiven = NOT_GIVEN, - customer_id: str | NotGiven = NOT_GIVEN, expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, - include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1214,15 +1269,13 @@ async def get_connection( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> GetConnectionResponse: + ) -> AsyncPaginator[ListConnectionConfigsResponse, AsyncOffsetPagination[ListConnectionConfigsResponse]]: """ - List all connections with optional filtering + List all connector configurations with optional filtering Args: connector_name: The name of the connector - include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets - extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -1231,32 +1284,33 @@ async def get_connection( timeout: Override the client-level default timeout for this request, in seconds """ - return await self.get( - "/connection", + return self.get_api_list( + "/connector-config", + page=AsyncOffsetPagination[ListConnectionConfigsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, - query=await async_maybe_transform( + query=maybe_transform( { - "connector_config_id": connector_config_id, "connector_name": connector_name, - "customer_id": customer_id, "expand": expand, - "include_secrets": include_secrets, "limit": limit, "offset": offset, }, - client_get_connection_params.ClientGetConnectionParams, + client_list_connection_configs_params.ClientListConnectionConfigsParams, ), ), - cast_to=GetConnectionResponse, + model=cast( + Any, ListConnectionConfigsResponse + ), # Union types cannot be passed in as arguments in the type system ) - def list_connection_configs( + def list_connections( self, *, + connector_config_id: str | NotGiven = NOT_GIVEN, connector_name: Literal[ "aircall", "airtable", @@ -1313,7 +1367,9 @@ def list_connection_configs( "googledrive", ] | NotGiven = NOT_GIVEN, + customer_id: str | NotGiven = NOT_GIVEN, expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, + include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, limit: int | NotGiven = NOT_GIVEN, offset: int | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1322,13 +1378,15 @@ def list_connection_configs( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> AsyncPaginator[ListConnectionConfigsResponse, AsyncOffsetPagination[ListConnectionConfigsResponse]]: + ) -> AsyncPaginator[ListConnectionsResponse, AsyncOffsetPagination[ListConnectionsResponse]]: """ - List all connector configurations with optional filtering + List all connections with optional filtering Args: connector_name: The name of the connector + include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -1338,8 +1396,8 @@ def list_connection_configs( timeout: Override the client-level default timeout for this request, in seconds """ return self.get_api_list( - "/connector-config", - page=AsyncOffsetPagination[ListConnectionConfigsResponse], + "/connection", + page=AsyncOffsetPagination[ListConnectionsResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -1347,74 +1405,18 @@ def list_connection_configs( timeout=timeout, query=maybe_transform( { + "connector_config_id": connector_config_id, "connector_name": connector_name, + "customer_id": customer_id, "expand": expand, + "include_secrets": include_secrets, "limit": limit, "offset": offset, }, - 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 - ) - - async def list_connections( - self, - id: str, - *, - expand: List[Literal["connector"]] | NotGiven = NOT_GIVEN, - include_secrets: Literal["none", "basic", "all"] | NotGiven = NOT_GIVEN, - refresh_policy: Literal["none", "force", "auto"] | 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, - ) -> ListConnectionsResponse: - """ - Get details of a specific connection - - Args: - include_secrets: Controls secret inclusion: none (default), basic (auth only), or all secrets - - 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 - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not id: - raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") - return cast( - ListConnectionsResponse, - await self.get( - f"/connection/{id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "expand": expand, - "include_secrets": include_secrets, - "refresh_policy": refresh_policy, - }, - client_list_connections_params.ClientListConnectionsParams, - ), - ), - cast_to=cast( - Any, ListConnectionsResponse - ), # 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_events( diff --git a/src/openint/types/client_get_connection_params.py b/src/openint/types/client_get_connection_params.py index 70f9c11..fc65a91 100644 --- a/src/openint/types/client_get_connection_params.py +++ b/src/openint/types/client_get_connection_params.py @@ -9,72 +9,13 @@ class ClientGetConnectionParams(TypedDict, total=False): - connector_config_id: str - - connector_name: Literal[ - "aircall", - "airtable", - "apollo", - "beancount", - "brex", - "coda", - "confluence", - "debug", - "discord", - "finch", - "firebase", - "foreceipt", - "fs", - "github", - "gong", - "google", - "greenhouse", - "heron", - "hubspot", - "intercom", - "jira", - "kustomer", - "lever", - "linear", - "lunchmoney", - "merge", - "microsoft", - "mongodb", - "moota", - "onebrick", - "outreach", - "pipedrive", - "plaid", - "postgres", - "qbo", - "ramp", - "revert", - "salesforce", - "salesloft", - "saltedge", - "slack", - "splitwise", - "spreadsheet", - "stripe", - "teller", - "toggl", - "twenty", - "webhook", - "wise", - "xero", - "yodlee", - "zohodesk", - "googledrive", - ] - """The name of the connector""" - - customer_id: str - expand: List[Literal["connector"]] include_secrets: Literal["none", "basic", "all"] """Controls secret inclusion: none (default), basic (auth only), or all secrets""" - limit: int - - offset: int + refresh_policy: Literal["none", "force", "auto"] + """ + Controls credential refresh: none (never), force (always), or auto (when + expired, default) + """ diff --git a/src/openint/types/client_list_connections_params.py b/src/openint/types/client_list_connections_params.py index 527a5a5..57be83d 100644 --- a/src/openint/types/client_list_connections_params.py +++ b/src/openint/types/client_list_connections_params.py @@ -9,13 +9,72 @@ class ClientListConnectionsParams(TypedDict, total=False): + connector_config_id: str + + connector_name: Literal[ + "aircall", + "airtable", + "apollo", + "beancount", + "brex", + "coda", + "confluence", + "debug", + "discord", + "finch", + "firebase", + "foreceipt", + "fs", + "github", + "gong", + "google", + "greenhouse", + "heron", + "hubspot", + "intercom", + "jira", + "kustomer", + "lever", + "linear", + "lunchmoney", + "merge", + "microsoft", + "mongodb", + "moota", + "onebrick", + "outreach", + "pipedrive", + "plaid", + "postgres", + "qbo", + "ramp", + "revert", + "salesforce", + "salesloft", + "saltedge", + "slack", + "splitwise", + "spreadsheet", + "stripe", + "teller", + "toggl", + "twenty", + "webhook", + "wise", + "xero", + "yodlee", + "zohodesk", + "googledrive", + ] + """The name of the connector""" + + customer_id: str + expand: List[Literal["connector"]] include_secrets: Literal["none", "basic", "all"] """Controls secret inclusion: none (default), basic (auth only), or all secrets""" - refresh_policy: Literal["none", "force", "auto"] - """ - Controls credential refresh: none (never), force (always), or auto (when - expired, default) - """ + limit: int + + offset: int diff --git a/src/openint/types/get_connection_response.py b/src/openint/types/get_connection_response.py index ae318d0..419e28c 100644 --- a/src/openint/types/get_connection_response.py +++ b/src/openint/types/get_connection_response.py @@ -10,242 +10,241 @@ __all__ = [ "GetConnectionResponse", - "Item", - "ItemConnectorsAircallConnectionSettings", - "ItemConnectorsAircallConnectionSettingsSettings", - "ItemConnectorsAirtableConnectionSettings", - "ItemConnectorsAirtableConnectionSettingsSettings", - "ItemConnectorsApolloConnectionSettings", - "ItemConnectorsApolloConnectionSettingsSettings", - "ItemConnectorsApolloConnectionSettingsSettingsOAuth", - "ItemConnectorsApolloConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsApolloConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsApolloConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsApolloConnectionSettingsSettingsError", - "ItemConnectorsBeancountConnectionSettings", - "ItemConnectorsBrexConnectionSettings", - "ItemConnectorsBrexConnectionSettingsSettings", - "ItemConnectorsCodaConnectionSettings", - "ItemConnectorsCodaConnectionSettingsSettings", - "ItemConnectorsConfluenceConnectionSettings", - "ItemConnectorsConfluenceConnectionSettingsSettings", - "ItemConnectorsConfluenceConnectionSettingsSettingsOAuth", - "ItemConnectorsConfluenceConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsConfluenceConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsConfluenceConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsConfluenceConnectionSettingsSettingsError", - "ItemConnectorsDebugConnectionSettings", - "ItemConnectorsDiscordConnectionSettings", - "ItemConnectorsDiscordConnectionSettingsSettings", - "ItemConnectorsDiscordConnectionSettingsSettingsOAuth", - "ItemConnectorsDiscordConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsDiscordConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsDiscordConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsDiscordConnectionSettingsSettingsError", - "ItemConnectorsFinchConnectionSettings", - "ItemConnectorsFinchConnectionSettingsSettings", - "ItemConnectorsFirebaseConnectionSettings", - "ItemConnectorsFirebaseConnectionSettingsSettings", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember0", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember0ServiceAccount", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthData", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0UserJson", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember1", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember2", - "ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1FirebaseConfig", - "ItemConnectorsForeceiptConnectionSettings", - "ItemConnectorsForeceiptConnectionSettingsSettings", - "ItemConnectorsFsConnectionSettings", - "ItemConnectorsFsConnectionSettingsSettings", - "ItemConnectorsGitHubConnectionSettings", - "ItemConnectorsGitHubConnectionSettingsSettings", - "ItemConnectorsGitHubConnectionSettingsSettingsOAuth", - "ItemConnectorsGitHubConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsGitHubConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsGitHubConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsGitHubConnectionSettingsSettingsError", - "ItemConnectorsGongConnectionSettings", - "ItemConnectorsGongConnectionSettingsSettings", - "ItemConnectorsGongConnectionSettingsSettingsOAuth", - "ItemConnectorsGongConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsGongConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsGongConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsGongConnectionSettingsSettingsError", - "ItemConnectorsGoogleConnectionSettings", - "ItemConnectorsGoogleConnectionSettingsSettings", - "ItemConnectorsGoogleConnectionSettingsSettingsOAuth", - "ItemConnectorsGoogleConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsGoogleConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsGoogleConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsGoogleConnectionSettingsSettingsError", - "ItemConnectorsGreenhouseConnectionSettings", - "ItemConnectorsGreenhouseConnectionSettingsSettings", - "ItemConnectorsHeronConnectionSettings", - "ItemConnectorsHubspotConnectionSettings", - "ItemConnectorsHubspotConnectionSettingsSettings", - "ItemConnectorsHubspotConnectionSettingsSettingsOAuth", - "ItemConnectorsHubspotConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsHubspotConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsHubspotConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsHubspotConnectionSettingsSettingsError", - "ItemConnectorsIntercomConnectionSettings", - "ItemConnectorsIntercomConnectionSettingsSettings", - "ItemConnectorsIntercomConnectionSettingsSettingsOAuth", - "ItemConnectorsIntercomConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsIntercomConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsIntercomConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsIntercomConnectionSettingsSettingsError", - "ItemConnectorsJiraConnectionSettings", - "ItemConnectorsJiraConnectionSettingsSettings", - "ItemConnectorsJiraConnectionSettingsSettingsOAuth", - "ItemConnectorsJiraConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsJiraConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsJiraConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsJiraConnectionSettingsSettingsError", - "ItemConnectorsKustomerConnectionSettings", - "ItemConnectorsKustomerConnectionSettingsSettings", - "ItemConnectorsKustomerConnectionSettingsSettingsOAuth", - "ItemConnectorsKustomerConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsKustomerConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsKustomerConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsKustomerConnectionSettingsSettingsError", - "ItemConnectorsLeverConnectionSettings", - "ItemConnectorsLeverConnectionSettingsSettings", - "ItemConnectorsLeverConnectionSettingsSettingsOAuth", - "ItemConnectorsLeverConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsLeverConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsLeverConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsLeverConnectionSettingsSettingsError", - "ItemConnectorsLinearConnectionSettings", - "ItemConnectorsLinearConnectionSettingsSettings", - "ItemConnectorsLinearConnectionSettingsSettingsOAuth", - "ItemConnectorsLinearConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsLinearConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsLinearConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsLinearConnectionSettingsSettingsError", - "ItemConnectorsLunchmoneyConnectionSettings", - "ItemConnectorsMercuryConnectionSettings", - "ItemConnectorsMergeConnectionSettings", - "ItemConnectorsMergeConnectionSettingsSettings", - "ItemConnectorsMicrosoftConnectionSettings", - "ItemConnectorsMicrosoftConnectionSettingsSettings", - "ItemConnectorsMicrosoftConnectionSettingsSettingsOAuth", - "ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsMicrosoftConnectionSettingsSettingsError", - "ItemConnectorsMongoDBConnectionSettings", - "ItemConnectorsMongoDBConnectionSettingsSettings", - "ItemConnectorsMootaConnectionSettings", - "ItemConnectorsOnebrickConnectionSettings", - "ItemConnectorsOnebrickConnectionSettingsSettings", - "ItemConnectorsOutreachConnectionSettings", - "ItemConnectorsOutreachConnectionSettingsSettings", - "ItemConnectorsOutreachConnectionSettingsSettingsOAuth", - "ItemConnectorsOutreachConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsOutreachConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsOutreachConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsOutreachConnectionSettingsSettingsError", - "ItemConnectorsPipedriveConnectionSettings", - "ItemConnectorsPipedriveConnectionSettingsSettings", - "ItemConnectorsPipedriveConnectionSettingsSettingsOAuth", - "ItemConnectorsPipedriveConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsPipedriveConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsPipedriveConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsPipedriveConnectionSettingsSettingsError", - "ItemConnectorsPlaidConnectionSettings", - "ItemConnectorsPlaidConnectionSettingsSettings", - "ItemConnectorsPostgresConnectionSettings", - "ItemConnectorsPostgresConnectionSettingsSettings", - "ItemConnectorsPostgresConnectionSettingsSettingsSourceQueries", - "ItemConnectorsQboConnectionSettings", - "ItemConnectorsQboConnectionSettingsSettings", - "ItemConnectorsQboConnectionSettingsSettingsOAuth", - "ItemConnectorsQboConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsQboConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsQboConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsQboConnectionSettingsSettingsError", - "ItemConnectorsRampConnectionSettings", - "ItemConnectorsRampConnectionSettingsSettings", - "ItemConnectorsRevertConnectionSettings", - "ItemConnectorsRevertConnectionSettingsSettings", - "ItemConnectorsSalesforceConnectionSettings", - "ItemConnectorsSalesforceConnectionSettingsSettings", - "ItemConnectorsSalesforceConnectionSettingsSettingsOAuth", - "ItemConnectorsSalesforceConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsSalesforceConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsSalesforceConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsSalesforceConnectionSettingsSettingsError", - "ItemConnectorsSalesloftConnectionSettings", - "ItemConnectorsSalesloftConnectionSettingsSettings", - "ItemConnectorsSalesloftConnectionSettingsSettingsOAuth", - "ItemConnectorsSalesloftConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsSalesloftConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsSalesloftConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsSalesloftConnectionSettingsSettingsError", - "ItemConnectorsSaltedgeConnectionSettings", - "ItemConnectorsSlackConnectionSettings", - "ItemConnectorsSlackConnectionSettingsSettings", - "ItemConnectorsSlackConnectionSettingsSettingsOAuth", - "ItemConnectorsSlackConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsSlackConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsSlackConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsSlackConnectionSettingsSettingsError", - "ItemConnectorsSplitwiseConnectionSettings", - "ItemConnectorsSplitwiseConnectionSettingsSettings", - "ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUser", - "ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUserNotifications", - "ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUserPicture", - "ItemConnectorsSpreadsheetConnectionSettings", - "ItemConnectorsSpreadsheetConnectionSettingsSettings", - "ItemConnectorsStripeConnectionSettings", - "ItemConnectorsStripeConnectionSettingsSettings", - "ItemConnectorsTellerConnectionSettings", - "ItemConnectorsTellerConnectionSettingsSettings", - "ItemConnectorsTogglConnectionSettings", - "ItemConnectorsTogglConnectionSettingsSettings", - "ItemConnectorsTwentyConnectionSettings", - "ItemConnectorsTwentyConnectionSettingsSettings", - "ItemConnectorsVenmoConnectionSettings", - "ItemConnectorsVenmoConnectionSettingsSettings", - "ItemConnectorsWebhookConnectionSettings", - "ItemConnectorsWebhookConnectionSettingsSettings", - "ItemConnectorsWiseConnectionSettings", - "ItemConnectorsWiseConnectionSettingsSettings", - "ItemConnectorsXeroConnectionSettings", - "ItemConnectorsXeroConnectionSettingsSettings", - "ItemConnectorsXeroConnectionSettingsSettingsOAuth", - "ItemConnectorsXeroConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsXeroConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsXeroConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsXeroConnectionSettingsSettingsError", - "ItemConnectorsYodleeConnectionSettings", - "ItemConnectorsYodleeConnectionSettingsSettings", - "ItemConnectorsYodleeConnectionSettingsSettingsAccessToken", - "ItemConnectorsYodleeConnectionSettingsSettingsProviderAccount", - "ItemConnectorsZohodeskConnectionSettings", - "ItemConnectorsZohodeskConnectionSettingsSettings", - "ItemConnectorsZohodeskConnectionSettingsSettingsOAuth", - "ItemConnectorsZohodeskConnectionSettingsSettingsOAuthCredentials", - "ItemConnectorsZohodeskConnectionSettingsSettingsOAuthCredentialsRaw", - "ItemConnectorsZohodeskConnectionSettingsSettingsOAuthConnectionConfig", - "ItemConnectorsZohodeskConnectionSettingsSettingsError", - "ItemConnectorsGoogledriveConnectionSettings", + "ConnectorsAircallConnectionSettings", + "ConnectorsAircallConnectionSettingsSettings", + "ConnectorsAirtableConnectionSettings", + "ConnectorsAirtableConnectionSettingsSettings", + "ConnectorsApolloConnectionSettings", + "ConnectorsApolloConnectionSettingsSettings", + "ConnectorsApolloConnectionSettingsSettingsOAuth", + "ConnectorsApolloConnectionSettingsSettingsOAuthCredentials", + "ConnectorsApolloConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsApolloConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsApolloConnectionSettingsSettingsError", + "ConnectorsBeancountConnectionSettings", + "ConnectorsBrexConnectionSettings", + "ConnectorsBrexConnectionSettingsSettings", + "ConnectorsCodaConnectionSettings", + "ConnectorsCodaConnectionSettingsSettings", + "ConnectorsConfluenceConnectionSettings", + "ConnectorsConfluenceConnectionSettingsSettings", + "ConnectorsConfluenceConnectionSettingsSettingsOAuth", + "ConnectorsConfluenceConnectionSettingsSettingsOAuthCredentials", + "ConnectorsConfluenceConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsConfluenceConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsConfluenceConnectionSettingsSettingsError", + "ConnectorsDebugConnectionSettings", + "ConnectorsDiscordConnectionSettings", + "ConnectorsDiscordConnectionSettingsSettings", + "ConnectorsDiscordConnectionSettingsSettingsOAuth", + "ConnectorsDiscordConnectionSettingsSettingsOAuthCredentials", + "ConnectorsDiscordConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsDiscordConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsDiscordConnectionSettingsSettingsError", + "ConnectorsFinchConnectionSettings", + "ConnectorsFinchConnectionSettingsSettings", + "ConnectorsFirebaseConnectionSettings", + "ConnectorsFirebaseConnectionSettingsSettings", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember0", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember0ServiceAccount", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember1", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthData", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0UserJson", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember1", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember2", + "ConnectorsFirebaseConnectionSettingsSettingsUnionMember1FirebaseConfig", + "ConnectorsForeceiptConnectionSettings", + "ConnectorsForeceiptConnectionSettingsSettings", + "ConnectorsFsConnectionSettings", + "ConnectorsFsConnectionSettingsSettings", + "ConnectorsGitHubConnectionSettings", + "ConnectorsGitHubConnectionSettingsSettings", + "ConnectorsGitHubConnectionSettingsSettingsOAuth", + "ConnectorsGitHubConnectionSettingsSettingsOAuthCredentials", + "ConnectorsGitHubConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsGitHubConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsGitHubConnectionSettingsSettingsError", + "ConnectorsGongConnectionSettings", + "ConnectorsGongConnectionSettingsSettings", + "ConnectorsGongConnectionSettingsSettingsOAuth", + "ConnectorsGongConnectionSettingsSettingsOAuthCredentials", + "ConnectorsGongConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsGongConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsGongConnectionSettingsSettingsError", + "ConnectorsGoogleConnectionSettings", + "ConnectorsGoogleConnectionSettingsSettings", + "ConnectorsGoogleConnectionSettingsSettingsOAuth", + "ConnectorsGoogleConnectionSettingsSettingsOAuthCredentials", + "ConnectorsGoogleConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsGoogleConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsGoogleConnectionSettingsSettingsError", + "ConnectorsGreenhouseConnectionSettings", + "ConnectorsGreenhouseConnectionSettingsSettings", + "ConnectorsHeronConnectionSettings", + "ConnectorsHubspotConnectionSettings", + "ConnectorsHubspotConnectionSettingsSettings", + "ConnectorsHubspotConnectionSettingsSettingsOAuth", + "ConnectorsHubspotConnectionSettingsSettingsOAuthCredentials", + "ConnectorsHubspotConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsHubspotConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsHubspotConnectionSettingsSettingsError", + "ConnectorsIntercomConnectionSettings", + "ConnectorsIntercomConnectionSettingsSettings", + "ConnectorsIntercomConnectionSettingsSettingsOAuth", + "ConnectorsIntercomConnectionSettingsSettingsOAuthCredentials", + "ConnectorsIntercomConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsIntercomConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsIntercomConnectionSettingsSettingsError", + "ConnectorsJiraConnectionSettings", + "ConnectorsJiraConnectionSettingsSettings", + "ConnectorsJiraConnectionSettingsSettingsOAuth", + "ConnectorsJiraConnectionSettingsSettingsOAuthCredentials", + "ConnectorsJiraConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsJiraConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsJiraConnectionSettingsSettingsError", + "ConnectorsKustomerConnectionSettings", + "ConnectorsKustomerConnectionSettingsSettings", + "ConnectorsKustomerConnectionSettingsSettingsOAuth", + "ConnectorsKustomerConnectionSettingsSettingsOAuthCredentials", + "ConnectorsKustomerConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsKustomerConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsKustomerConnectionSettingsSettingsError", + "ConnectorsLeverConnectionSettings", + "ConnectorsLeverConnectionSettingsSettings", + "ConnectorsLeverConnectionSettingsSettingsOAuth", + "ConnectorsLeverConnectionSettingsSettingsOAuthCredentials", + "ConnectorsLeverConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsLeverConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsLeverConnectionSettingsSettingsError", + "ConnectorsLinearConnectionSettings", + "ConnectorsLinearConnectionSettingsSettings", + "ConnectorsLinearConnectionSettingsSettingsOAuth", + "ConnectorsLinearConnectionSettingsSettingsOAuthCredentials", + "ConnectorsLinearConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsLinearConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsLinearConnectionSettingsSettingsError", + "ConnectorsLunchmoneyConnectionSettings", + "ConnectorsMercuryConnectionSettings", + "ConnectorsMergeConnectionSettings", + "ConnectorsMergeConnectionSettingsSettings", + "ConnectorsMicrosoftConnectionSettings", + "ConnectorsMicrosoftConnectionSettingsSettings", + "ConnectorsMicrosoftConnectionSettingsSettingsOAuth", + "ConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentials", + "ConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsMicrosoftConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsMicrosoftConnectionSettingsSettingsError", + "ConnectorsMongoDBConnectionSettings", + "ConnectorsMongoDBConnectionSettingsSettings", + "ConnectorsMootaConnectionSettings", + "ConnectorsOnebrickConnectionSettings", + "ConnectorsOnebrickConnectionSettingsSettings", + "ConnectorsOutreachConnectionSettings", + "ConnectorsOutreachConnectionSettingsSettings", + "ConnectorsOutreachConnectionSettingsSettingsOAuth", + "ConnectorsOutreachConnectionSettingsSettingsOAuthCredentials", + "ConnectorsOutreachConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsOutreachConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsOutreachConnectionSettingsSettingsError", + "ConnectorsPipedriveConnectionSettings", + "ConnectorsPipedriveConnectionSettingsSettings", + "ConnectorsPipedriveConnectionSettingsSettingsOAuth", + "ConnectorsPipedriveConnectionSettingsSettingsOAuthCredentials", + "ConnectorsPipedriveConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsPipedriveConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsPipedriveConnectionSettingsSettingsError", + "ConnectorsPlaidConnectionSettings", + "ConnectorsPlaidConnectionSettingsSettings", + "ConnectorsPostgresConnectionSettings", + "ConnectorsPostgresConnectionSettingsSettings", + "ConnectorsPostgresConnectionSettingsSettingsSourceQueries", + "ConnectorsQboConnectionSettings", + "ConnectorsQboConnectionSettingsSettings", + "ConnectorsQboConnectionSettingsSettingsOAuth", + "ConnectorsQboConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsQboConnectionSettingsSettingsOAuthCredentials", + "ConnectorsQboConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsQboConnectionSettingsSettingsError", + "ConnectorsRampConnectionSettings", + "ConnectorsRampConnectionSettingsSettings", + "ConnectorsRevertConnectionSettings", + "ConnectorsRevertConnectionSettingsSettings", + "ConnectorsSalesforceConnectionSettings", + "ConnectorsSalesforceConnectionSettingsSettings", + "ConnectorsSalesforceConnectionSettingsSettingsOAuth", + "ConnectorsSalesforceConnectionSettingsSettingsOAuthCredentials", + "ConnectorsSalesforceConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsSalesforceConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsSalesforceConnectionSettingsSettingsError", + "ConnectorsSalesloftConnectionSettings", + "ConnectorsSalesloftConnectionSettingsSettings", + "ConnectorsSalesloftConnectionSettingsSettingsOAuth", + "ConnectorsSalesloftConnectionSettingsSettingsOAuthCredentials", + "ConnectorsSalesloftConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsSalesloftConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsSalesloftConnectionSettingsSettingsError", + "ConnectorsSaltedgeConnectionSettings", + "ConnectorsSlackConnectionSettings", + "ConnectorsSlackConnectionSettingsSettings", + "ConnectorsSlackConnectionSettingsSettingsOAuth", + "ConnectorsSlackConnectionSettingsSettingsOAuthCredentials", + "ConnectorsSlackConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsSlackConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsSlackConnectionSettingsSettingsError", + "ConnectorsSplitwiseConnectionSettings", + "ConnectorsSplitwiseConnectionSettingsSettings", + "ConnectorsSplitwiseConnectionSettingsSettingsCurrentUser", + "ConnectorsSplitwiseConnectionSettingsSettingsCurrentUserNotifications", + "ConnectorsSplitwiseConnectionSettingsSettingsCurrentUserPicture", + "ConnectorsSpreadsheetConnectionSettings", + "ConnectorsSpreadsheetConnectionSettingsSettings", + "ConnectorsStripeConnectionSettings", + "ConnectorsStripeConnectionSettingsSettings", + "ConnectorsTellerConnectionSettings", + "ConnectorsTellerConnectionSettingsSettings", + "ConnectorsTogglConnectionSettings", + "ConnectorsTogglConnectionSettingsSettings", + "ConnectorsTwentyConnectionSettings", + "ConnectorsTwentyConnectionSettingsSettings", + "ConnectorsVenmoConnectionSettings", + "ConnectorsVenmoConnectionSettingsSettings", + "ConnectorsWebhookConnectionSettings", + "ConnectorsWebhookConnectionSettingsSettings", + "ConnectorsWiseConnectionSettings", + "ConnectorsWiseConnectionSettingsSettings", + "ConnectorsXeroConnectionSettings", + "ConnectorsXeroConnectionSettingsSettings", + "ConnectorsXeroConnectionSettingsSettingsOAuth", + "ConnectorsXeroConnectionSettingsSettingsOAuthCredentials", + "ConnectorsXeroConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsXeroConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsXeroConnectionSettingsSettingsError", + "ConnectorsYodleeConnectionSettings", + "ConnectorsYodleeConnectionSettingsSettings", + "ConnectorsYodleeConnectionSettingsSettingsAccessToken", + "ConnectorsYodleeConnectionSettingsSettingsProviderAccount", + "ConnectorsZohodeskConnectionSettings", + "ConnectorsZohodeskConnectionSettingsSettings", + "ConnectorsZohodeskConnectionSettingsSettingsOAuth", + "ConnectorsZohodeskConnectionSettingsSettingsOAuthCredentials", + "ConnectorsZohodeskConnectionSettingsSettingsOAuthCredentialsRaw", + "ConnectorsZohodeskConnectionSettingsSettingsOAuthConnectionConfig", + "ConnectorsZohodeskConnectionSettingsSettingsError", + "ConnectorsGoogledriveConnectionSettings", ] -class ItemConnectorsAircallConnectionSettingsSettings(BaseModel): +class ConnectorsAircallConnectionSettingsSettings(BaseModel): api_id: str = FieldInfo(alias="apiId") api_token: str = FieldInfo(alias="apiToken") -class ItemConnectorsAircallConnectionSettings(BaseModel): +class ConnectorsAircallConnectionSettings(BaseModel): connector_name: Literal["aircall"] - settings: ItemConnectorsAircallConnectionSettingsSettings + settings: ConnectorsAircallConnectionSettingsSettings id: Optional[str] = None @@ -256,16 +255,16 @@ class ItemConnectorsAircallConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsAirtableConnectionSettingsSettings(BaseModel): +class ConnectorsAirtableConnectionSettingsSettings(BaseModel): airtable_base: str = FieldInfo(alias="airtableBase") api_key: str = FieldInfo(alias="apiKey") -class ItemConnectorsAirtableConnectionSettings(BaseModel): +class ConnectorsAirtableConnectionSettings(BaseModel): connector_name: Literal["airtable"] - settings: ItemConnectorsAirtableConnectionSettingsSettings + settings: ConnectorsAirtableConnectionSettingsSettings id: Optional[str] = None @@ -276,7 +275,7 @@ class ItemConnectorsAirtableConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsApolloConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsApolloConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -292,8 +291,8 @@ class ItemConnectorsApolloConnectionSettingsSettingsOAuthCredentialsRaw(BaseMode scope: Optional[str] = None -class ItemConnectorsApolloConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsApolloConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsApolloConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsApolloConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -306,7 +305,7 @@ class ItemConnectorsApolloConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsApolloConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsApolloConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -318,30 +317,30 @@ class ItemConnectorsApolloConnectionSettingsSettingsOAuthConnectionConfig(BaseMo def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsApolloConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsApolloConnectionSettingsSettingsOAuthCredentials +class ConnectorsApolloConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsApolloConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsApolloConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsApolloConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsApolloConnectionSettingsSettingsError(BaseModel): +class ConnectorsApolloConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsApolloConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsApolloConnectionSettingsSettingsOAuth +class ConnectorsApolloConnectionSettingsSettings(BaseModel): + oauth: ConnectorsApolloConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsApolloConnectionSettingsSettingsError] = None + error: Optional[ConnectorsApolloConnectionSettingsSettingsError] = None -class ItemConnectorsApolloConnectionSettings(BaseModel): +class ConnectorsApolloConnectionSettings(BaseModel): connector_name: Literal["apollo"] - settings: ItemConnectorsApolloConnectionSettingsSettings + settings: ConnectorsApolloConnectionSettingsSettings id: Optional[str] = None @@ -352,7 +351,7 @@ class ItemConnectorsApolloConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsBeancountConnectionSettings(BaseModel): +class ConnectorsBeancountConnectionSettings(BaseModel): connector_name: Literal["beancount"] settings: None @@ -366,14 +365,14 @@ class ItemConnectorsBeancountConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsBrexConnectionSettingsSettings(BaseModel): +class ConnectorsBrexConnectionSettingsSettings(BaseModel): access_token: str = FieldInfo(alias="accessToken") -class ItemConnectorsBrexConnectionSettings(BaseModel): +class ConnectorsBrexConnectionSettings(BaseModel): connector_name: Literal["brex"] - settings: ItemConnectorsBrexConnectionSettingsSettings + settings: ConnectorsBrexConnectionSettingsSettings id: Optional[str] = None @@ -384,14 +383,14 @@ class ItemConnectorsBrexConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsCodaConnectionSettingsSettings(BaseModel): +class ConnectorsCodaConnectionSettingsSettings(BaseModel): api_key: str = FieldInfo(alias="apiKey") -class ItemConnectorsCodaConnectionSettings(BaseModel): +class ConnectorsCodaConnectionSettings(BaseModel): connector_name: Literal["coda"] - settings: ItemConnectorsCodaConnectionSettingsSettings + settings: ConnectorsCodaConnectionSettingsSettings id: Optional[str] = None @@ -402,7 +401,7 @@ class ItemConnectorsCodaConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsConfluenceConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsConfluenceConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -418,8 +417,8 @@ class ItemConnectorsConfluenceConnectionSettingsSettingsOAuthCredentialsRaw(Base scope: Optional[str] = None -class ItemConnectorsConfluenceConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsConfluenceConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsConfluenceConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsConfluenceConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -432,7 +431,7 @@ class ItemConnectorsConfluenceConnectionSettingsSettingsOAuthCredentials(BaseMod refresh_token: Optional[str] = None -class ItemConnectorsConfluenceConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsConfluenceConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -444,30 +443,30 @@ class ItemConnectorsConfluenceConnectionSettingsSettingsOAuthConnectionConfig(Ba def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsConfluenceConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsConfluenceConnectionSettingsSettingsOAuthCredentials +class ConnectorsConfluenceConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsConfluenceConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsConfluenceConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsConfluenceConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsConfluenceConnectionSettingsSettingsError(BaseModel): +class ConnectorsConfluenceConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsConfluenceConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsConfluenceConnectionSettingsSettingsOAuth +class ConnectorsConfluenceConnectionSettingsSettings(BaseModel): + oauth: ConnectorsConfluenceConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsConfluenceConnectionSettingsSettingsError] = None + error: Optional[ConnectorsConfluenceConnectionSettingsSettingsError] = None -class ItemConnectorsConfluenceConnectionSettings(BaseModel): +class ConnectorsConfluenceConnectionSettings(BaseModel): connector_name: Literal["confluence"] - settings: ItemConnectorsConfluenceConnectionSettingsSettings + settings: ConnectorsConfluenceConnectionSettingsSettings id: Optional[str] = None @@ -478,7 +477,7 @@ class ItemConnectorsConfluenceConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsDebugConnectionSettings(BaseModel): +class ConnectorsDebugConnectionSettings(BaseModel): connector_name: Literal["debug"] id: Optional[str] = None @@ -492,7 +491,7 @@ class ItemConnectorsDebugConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsDiscordConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsDiscordConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -508,8 +507,8 @@ class ItemConnectorsDiscordConnectionSettingsSettingsOAuthCredentialsRaw(BaseMod scope: Optional[str] = None -class ItemConnectorsDiscordConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsDiscordConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsDiscordConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsDiscordConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -522,7 +521,7 @@ class ItemConnectorsDiscordConnectionSettingsSettingsOAuthCredentials(BaseModel) refresh_token: Optional[str] = None -class ItemConnectorsDiscordConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsDiscordConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -534,30 +533,30 @@ class ItemConnectorsDiscordConnectionSettingsSettingsOAuthConnectionConfig(BaseM def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsDiscordConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsDiscordConnectionSettingsSettingsOAuthCredentials +class ConnectorsDiscordConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsDiscordConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsDiscordConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsDiscordConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsDiscordConnectionSettingsSettingsError(BaseModel): +class ConnectorsDiscordConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsDiscordConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsDiscordConnectionSettingsSettingsOAuth +class ConnectorsDiscordConnectionSettingsSettings(BaseModel): + oauth: ConnectorsDiscordConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsDiscordConnectionSettingsSettingsError] = None + error: Optional[ConnectorsDiscordConnectionSettingsSettingsError] = None -class ItemConnectorsDiscordConnectionSettings(BaseModel): +class ConnectorsDiscordConnectionSettings(BaseModel): connector_name: Literal["discord"] - settings: ItemConnectorsDiscordConnectionSettingsSettings + settings: ConnectorsDiscordConnectionSettingsSettings id: Optional[str] = None @@ -568,14 +567,14 @@ class ItemConnectorsDiscordConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsFinchConnectionSettingsSettings(BaseModel): +class ConnectorsFinchConnectionSettingsSettings(BaseModel): access_token: str -class ItemConnectorsFinchConnectionSettings(BaseModel): +class ConnectorsFinchConnectionSettings(BaseModel): connector_name: Literal["finch"] - settings: ItemConnectorsFinchConnectionSettingsSettings + settings: ConnectorsFinchConnectionSettingsSettings id: Optional[str] = None @@ -586,7 +585,7 @@ class ItemConnectorsFinchConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember0ServiceAccount(BaseModel): +class ConnectorsFirebaseConnectionSettingsSettingsUnionMember0ServiceAccount(BaseModel): project_id: str if TYPE_CHECKING: @@ -596,15 +595,15 @@ class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember0ServiceAccount def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember0(BaseModel): +class ConnectorsFirebaseConnectionSettingsSettingsUnionMember0(BaseModel): role: Literal["admin"] - service_account: ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember0ServiceAccount = FieldInfo( + service_account: ConnectorsFirebaseConnectionSettingsSettingsUnionMember0ServiceAccount = FieldInfo( alias="serviceAccount" ) -class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0UserJson(BaseModel): +class ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0UserJson(BaseModel): app_name: str = FieldInfo(alias="appName") sts_token_manager: Dict[str, object] = FieldInfo(alias="stsTokenManager") @@ -618,21 +617,21 @@ class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionM def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0(BaseModel): +class ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0(BaseModel): method: Literal["userJson"] - user_json: ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0UserJson = FieldInfo( + user_json: ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0UserJson = FieldInfo( alias="userJson" ) -class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember1(BaseModel): +class ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember1(BaseModel): custom_token: str = FieldInfo(alias="customToken") method: Literal["customToken"] -class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember2(BaseModel): +class ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember2(BaseModel): email: str method: Literal["emailPassword"] @@ -640,14 +639,14 @@ class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionM password: str -ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthData: TypeAlias = Union[ - ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0, - ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember1, - ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember2, +ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthData: TypeAlias = Union[ + ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember0, + ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember1, + ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthDataUnionMember2, ] -class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1FirebaseConfig(BaseModel): +class ConnectorsFirebaseConnectionSettingsSettingsUnionMember1FirebaseConfig(BaseModel): api_key: str = FieldInfo(alias="apiKey") app_id: str = FieldInfo(alias="appId") @@ -665,26 +664,25 @@ class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1FirebaseConfig storage_bucket: Optional[str] = FieldInfo(alias="storageBucket", default=None) -class ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1(BaseModel): - auth_data: ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthData = FieldInfo(alias="authData") +class ConnectorsFirebaseConnectionSettingsSettingsUnionMember1(BaseModel): + auth_data: ConnectorsFirebaseConnectionSettingsSettingsUnionMember1AuthData = FieldInfo(alias="authData") - firebase_config: ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1FirebaseConfig = FieldInfo( + firebase_config: ConnectorsFirebaseConnectionSettingsSettingsUnionMember1FirebaseConfig = FieldInfo( alias="firebaseConfig" ) role: Literal["user"] -ItemConnectorsFirebaseConnectionSettingsSettings: TypeAlias = Union[ - ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember0, - ItemConnectorsFirebaseConnectionSettingsSettingsUnionMember1, +ConnectorsFirebaseConnectionSettingsSettings: TypeAlias = Union[ + ConnectorsFirebaseConnectionSettingsSettingsUnionMember0, ConnectorsFirebaseConnectionSettingsSettingsUnionMember1 ] -class ItemConnectorsFirebaseConnectionSettings(BaseModel): +class ConnectorsFirebaseConnectionSettings(BaseModel): connector_name: Literal["firebase"] - settings: ItemConnectorsFirebaseConnectionSettingsSettings + settings: ConnectorsFirebaseConnectionSettingsSettings id: Optional[str] = None @@ -695,7 +693,7 @@ class ItemConnectorsFirebaseConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsForeceiptConnectionSettingsSettings(BaseModel): +class ConnectorsForeceiptConnectionSettingsSettings(BaseModel): env_name: Literal["staging", "production"] = FieldInfo(alias="envName") api_id: Optional[object] = FieldInfo(alias="_id", default=None) @@ -705,10 +703,10 @@ class ItemConnectorsForeceiptConnectionSettingsSettings(BaseModel): options: Optional[object] = None -class ItemConnectorsForeceiptConnectionSettings(BaseModel): +class ConnectorsForeceiptConnectionSettings(BaseModel): connector_name: Literal["foreceipt"] - settings: ItemConnectorsForeceiptConnectionSettingsSettings + settings: ConnectorsForeceiptConnectionSettingsSettings id: Optional[str] = None @@ -719,14 +717,14 @@ class ItemConnectorsForeceiptConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsFsConnectionSettingsSettings(BaseModel): +class ConnectorsFsConnectionSettingsSettings(BaseModel): base_path: str = FieldInfo(alias="basePath") -class ItemConnectorsFsConnectionSettings(BaseModel): +class ConnectorsFsConnectionSettings(BaseModel): connector_name: Literal["fs"] - settings: ItemConnectorsFsConnectionSettingsSettings + settings: ConnectorsFsConnectionSettingsSettings id: Optional[str] = None @@ -737,7 +735,7 @@ class ItemConnectorsFsConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGitHubConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsGitHubConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -753,8 +751,8 @@ class ItemConnectorsGitHubConnectionSettingsSettingsOAuthCredentialsRaw(BaseMode scope: Optional[str] = None -class ItemConnectorsGitHubConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsGitHubConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsGitHubConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsGitHubConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -767,7 +765,7 @@ class ItemConnectorsGitHubConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsGitHubConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsGitHubConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -779,30 +777,30 @@ class ItemConnectorsGitHubConnectionSettingsSettingsOAuthConnectionConfig(BaseMo def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsGitHubConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsGitHubConnectionSettingsSettingsOAuthCredentials +class ConnectorsGitHubConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsGitHubConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsGitHubConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsGitHubConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsGitHubConnectionSettingsSettingsError(BaseModel): +class ConnectorsGitHubConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsGitHubConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsGitHubConnectionSettingsSettingsOAuth +class ConnectorsGitHubConnectionSettingsSettings(BaseModel): + oauth: ConnectorsGitHubConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsGitHubConnectionSettingsSettingsError] = None + error: Optional[ConnectorsGitHubConnectionSettingsSettingsError] = None -class ItemConnectorsGitHubConnectionSettings(BaseModel): +class ConnectorsGitHubConnectionSettings(BaseModel): connector_name: Literal["github"] - settings: ItemConnectorsGitHubConnectionSettingsSettings + settings: ConnectorsGitHubConnectionSettingsSettings id: Optional[str] = None @@ -813,7 +811,7 @@ class ItemConnectorsGitHubConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGongConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsGongConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -829,8 +827,8 @@ class ItemConnectorsGongConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel) scope: Optional[str] = None -class ItemConnectorsGongConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsGongConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsGongConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsGongConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -843,7 +841,7 @@ class ItemConnectorsGongConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsGongConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsGongConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -855,30 +853,30 @@ class ItemConnectorsGongConnectionSettingsSettingsOAuthConnectionConfig(BaseMode def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsGongConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsGongConnectionSettingsSettingsOAuthCredentials +class ConnectorsGongConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsGongConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsGongConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsGongConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsGongConnectionSettingsSettingsError(BaseModel): +class ConnectorsGongConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsGongConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsGongConnectionSettingsSettingsOAuth +class ConnectorsGongConnectionSettingsSettings(BaseModel): + oauth: ConnectorsGongConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsGongConnectionSettingsSettingsError] = None + error: Optional[ConnectorsGongConnectionSettingsSettingsError] = None -class ItemConnectorsGongConnectionSettings(BaseModel): +class ConnectorsGongConnectionSettings(BaseModel): connector_name: Literal["gong"] - settings: ItemConnectorsGongConnectionSettingsSettings + settings: ConnectorsGongConnectionSettingsSettings id: Optional[str] = None @@ -889,7 +887,7 @@ class ItemConnectorsGongConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGoogleConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsGoogleConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -905,8 +903,8 @@ class ItemConnectorsGoogleConnectionSettingsSettingsOAuthCredentialsRaw(BaseMode scope: Optional[str] = None -class ItemConnectorsGoogleConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsGoogleConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsGoogleConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsGoogleConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -919,7 +917,7 @@ class ItemConnectorsGoogleConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsGoogleConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsGoogleConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -931,32 +929,32 @@ class ItemConnectorsGoogleConnectionSettingsSettingsOAuthConnectionConfig(BaseMo def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsGoogleConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsGoogleConnectionSettingsSettingsOAuthCredentials +class ConnectorsGoogleConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsGoogleConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsGoogleConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsGoogleConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsGoogleConnectionSettingsSettingsError(BaseModel): +class ConnectorsGoogleConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsGoogleConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsGoogleConnectionSettingsSettingsOAuth +class ConnectorsGoogleConnectionSettingsSettings(BaseModel): + oauth: ConnectorsGoogleConnectionSettingsSettingsOAuth client_id: Optional[str] = None - error: Optional[ItemConnectorsGoogleConnectionSettingsSettingsError] = None + error: Optional[ConnectorsGoogleConnectionSettingsSettingsError] = None -class ItemConnectorsGoogleConnectionSettings(BaseModel): +class ConnectorsGoogleConnectionSettings(BaseModel): connector_name: Literal["google"] - settings: ItemConnectorsGoogleConnectionSettingsSettings + settings: ConnectorsGoogleConnectionSettingsSettings id: Optional[str] = None @@ -967,14 +965,14 @@ class ItemConnectorsGoogleConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGreenhouseConnectionSettingsSettings(BaseModel): +class ConnectorsGreenhouseConnectionSettingsSettings(BaseModel): api_key: str = FieldInfo(alias="apiKey") -class ItemConnectorsGreenhouseConnectionSettings(BaseModel): +class ConnectorsGreenhouseConnectionSettings(BaseModel): connector_name: Literal["greenhouse"] - settings: ItemConnectorsGreenhouseConnectionSettingsSettings + settings: ConnectorsGreenhouseConnectionSettingsSettings id: Optional[str] = None @@ -985,7 +983,7 @@ class ItemConnectorsGreenhouseConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsHeronConnectionSettings(BaseModel): +class ConnectorsHeronConnectionSettings(BaseModel): connector_name: Literal["heron"] settings: None @@ -999,7 +997,7 @@ class ItemConnectorsHeronConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsHubspotConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsHubspotConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1015,8 +1013,8 @@ class ItemConnectorsHubspotConnectionSettingsSettingsOAuthCredentialsRaw(BaseMod scope: Optional[str] = None -class ItemConnectorsHubspotConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsHubspotConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsHubspotConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsHubspotConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1029,7 +1027,7 @@ class ItemConnectorsHubspotConnectionSettingsSettingsOAuthCredentials(BaseModel) refresh_token: Optional[str] = None -class ItemConnectorsHubspotConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsHubspotConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1041,32 +1039,32 @@ class ItemConnectorsHubspotConnectionSettingsSettingsOAuthConnectionConfig(BaseM def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsHubspotConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsHubspotConnectionSettingsSettingsOAuthCredentials +class ConnectorsHubspotConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsHubspotConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsHubspotConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsHubspotConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsHubspotConnectionSettingsSettingsError(BaseModel): +class ConnectorsHubspotConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsHubspotConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsHubspotConnectionSettingsSettingsOAuth +class ConnectorsHubspotConnectionSettingsSettings(BaseModel): + oauth: ConnectorsHubspotConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsHubspotConnectionSettingsSettingsError] = None + error: Optional[ConnectorsHubspotConnectionSettingsSettingsError] = None extra: Optional[object] = None -class ItemConnectorsHubspotConnectionSettings(BaseModel): +class ConnectorsHubspotConnectionSettings(BaseModel): connector_name: Literal["hubspot"] - settings: ItemConnectorsHubspotConnectionSettingsSettings + settings: ConnectorsHubspotConnectionSettingsSettings id: Optional[str] = None @@ -1077,7 +1075,7 @@ class ItemConnectorsHubspotConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsIntercomConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsIntercomConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1093,8 +1091,8 @@ class ItemConnectorsIntercomConnectionSettingsSettingsOAuthCredentialsRaw(BaseMo scope: Optional[str] = None -class ItemConnectorsIntercomConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsIntercomConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsIntercomConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsIntercomConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1107,7 +1105,7 @@ class ItemConnectorsIntercomConnectionSettingsSettingsOAuthCredentials(BaseModel refresh_token: Optional[str] = None -class ItemConnectorsIntercomConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsIntercomConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1119,30 +1117,30 @@ class ItemConnectorsIntercomConnectionSettingsSettingsOAuthConnectionConfig(Base def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsIntercomConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsIntercomConnectionSettingsSettingsOAuthCredentials +class ConnectorsIntercomConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsIntercomConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsIntercomConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsIntercomConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsIntercomConnectionSettingsSettingsError(BaseModel): +class ConnectorsIntercomConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsIntercomConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsIntercomConnectionSettingsSettingsOAuth +class ConnectorsIntercomConnectionSettingsSettings(BaseModel): + oauth: ConnectorsIntercomConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsIntercomConnectionSettingsSettingsError] = None + error: Optional[ConnectorsIntercomConnectionSettingsSettingsError] = None -class ItemConnectorsIntercomConnectionSettings(BaseModel): +class ConnectorsIntercomConnectionSettings(BaseModel): connector_name: Literal["intercom"] - settings: ItemConnectorsIntercomConnectionSettingsSettings + settings: ConnectorsIntercomConnectionSettingsSettings id: Optional[str] = None @@ -1153,7 +1151,7 @@ class ItemConnectorsIntercomConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsJiraConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsJiraConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1169,8 +1167,8 @@ class ItemConnectorsJiraConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel) scope: Optional[str] = None -class ItemConnectorsJiraConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsJiraConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsJiraConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsJiraConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1183,7 +1181,7 @@ class ItemConnectorsJiraConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsJiraConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsJiraConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1195,30 +1193,30 @@ class ItemConnectorsJiraConnectionSettingsSettingsOAuthConnectionConfig(BaseMode def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsJiraConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsJiraConnectionSettingsSettingsOAuthCredentials +class ConnectorsJiraConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsJiraConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsJiraConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsJiraConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsJiraConnectionSettingsSettingsError(BaseModel): +class ConnectorsJiraConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsJiraConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsJiraConnectionSettingsSettingsOAuth +class ConnectorsJiraConnectionSettingsSettings(BaseModel): + oauth: ConnectorsJiraConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsJiraConnectionSettingsSettingsError] = None + error: Optional[ConnectorsJiraConnectionSettingsSettingsError] = None -class ItemConnectorsJiraConnectionSettings(BaseModel): +class ConnectorsJiraConnectionSettings(BaseModel): connector_name: Literal["jira"] - settings: ItemConnectorsJiraConnectionSettingsSettings + settings: ConnectorsJiraConnectionSettingsSettings id: Optional[str] = None @@ -1229,7 +1227,7 @@ class ItemConnectorsJiraConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsKustomerConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsKustomerConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1245,8 +1243,8 @@ class ItemConnectorsKustomerConnectionSettingsSettingsOAuthCredentialsRaw(BaseMo scope: Optional[str] = None -class ItemConnectorsKustomerConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsKustomerConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsKustomerConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsKustomerConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1259,7 +1257,7 @@ class ItemConnectorsKustomerConnectionSettingsSettingsOAuthCredentials(BaseModel refresh_token: Optional[str] = None -class ItemConnectorsKustomerConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsKustomerConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1271,30 +1269,30 @@ class ItemConnectorsKustomerConnectionSettingsSettingsOAuthConnectionConfig(Base def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsKustomerConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsKustomerConnectionSettingsSettingsOAuthCredentials +class ConnectorsKustomerConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsKustomerConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsKustomerConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsKustomerConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsKustomerConnectionSettingsSettingsError(BaseModel): +class ConnectorsKustomerConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsKustomerConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsKustomerConnectionSettingsSettingsOAuth +class ConnectorsKustomerConnectionSettingsSettings(BaseModel): + oauth: ConnectorsKustomerConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsKustomerConnectionSettingsSettingsError] = None + error: Optional[ConnectorsKustomerConnectionSettingsSettingsError] = None -class ItemConnectorsKustomerConnectionSettings(BaseModel): +class ConnectorsKustomerConnectionSettings(BaseModel): connector_name: Literal["kustomer"] - settings: ItemConnectorsKustomerConnectionSettingsSettings + settings: ConnectorsKustomerConnectionSettingsSettings id: Optional[str] = None @@ -1305,7 +1303,7 @@ class ItemConnectorsKustomerConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsLeverConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsLeverConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1321,8 +1319,8 @@ class ItemConnectorsLeverConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel scope: Optional[str] = None -class ItemConnectorsLeverConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsLeverConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsLeverConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsLeverConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1335,7 +1333,7 @@ class ItemConnectorsLeverConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsLeverConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsLeverConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1347,30 +1345,30 @@ class ItemConnectorsLeverConnectionSettingsSettingsOAuthConnectionConfig(BaseMod def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsLeverConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsLeverConnectionSettingsSettingsOAuthCredentials +class ConnectorsLeverConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsLeverConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsLeverConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsLeverConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsLeverConnectionSettingsSettingsError(BaseModel): +class ConnectorsLeverConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsLeverConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsLeverConnectionSettingsSettingsOAuth +class ConnectorsLeverConnectionSettingsSettings(BaseModel): + oauth: ConnectorsLeverConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsLeverConnectionSettingsSettingsError] = None + error: Optional[ConnectorsLeverConnectionSettingsSettingsError] = None -class ItemConnectorsLeverConnectionSettings(BaseModel): +class ConnectorsLeverConnectionSettings(BaseModel): connector_name: Literal["lever"] - settings: ItemConnectorsLeverConnectionSettingsSettings + settings: ConnectorsLeverConnectionSettingsSettings id: Optional[str] = None @@ -1381,7 +1379,7 @@ class ItemConnectorsLeverConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsLinearConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsLinearConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1397,8 +1395,8 @@ class ItemConnectorsLinearConnectionSettingsSettingsOAuthCredentialsRaw(BaseMode scope: Optional[str] = None -class ItemConnectorsLinearConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsLinearConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsLinearConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsLinearConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1411,7 +1409,7 @@ class ItemConnectorsLinearConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsLinearConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsLinearConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1423,30 +1421,30 @@ class ItemConnectorsLinearConnectionSettingsSettingsOAuthConnectionConfig(BaseMo def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsLinearConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsLinearConnectionSettingsSettingsOAuthCredentials +class ConnectorsLinearConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsLinearConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsLinearConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsLinearConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsLinearConnectionSettingsSettingsError(BaseModel): +class ConnectorsLinearConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsLinearConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsLinearConnectionSettingsSettingsOAuth +class ConnectorsLinearConnectionSettingsSettings(BaseModel): + oauth: ConnectorsLinearConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsLinearConnectionSettingsSettingsError] = None + error: Optional[ConnectorsLinearConnectionSettingsSettingsError] = None -class ItemConnectorsLinearConnectionSettings(BaseModel): +class ConnectorsLinearConnectionSettings(BaseModel): connector_name: Literal["linear"] - settings: ItemConnectorsLinearConnectionSettingsSettings + settings: ConnectorsLinearConnectionSettingsSettings id: Optional[str] = None @@ -1457,7 +1455,7 @@ class ItemConnectorsLinearConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsLunchmoneyConnectionSettings(BaseModel): +class ConnectorsLunchmoneyConnectionSettings(BaseModel): connector_name: Literal["lunchmoney"] settings: None @@ -1471,7 +1469,7 @@ class ItemConnectorsLunchmoneyConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMercuryConnectionSettings(BaseModel): +class ConnectorsMercuryConnectionSettings(BaseModel): connector_name: Literal["mercury"] settings: None @@ -1485,16 +1483,16 @@ class ItemConnectorsMercuryConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMergeConnectionSettingsSettings(BaseModel): +class ConnectorsMergeConnectionSettingsSettings(BaseModel): account_token: str = FieldInfo(alias="accountToken") account_details: Optional[object] = FieldInfo(alias="accountDetails", default=None) -class ItemConnectorsMergeConnectionSettings(BaseModel): +class ConnectorsMergeConnectionSettings(BaseModel): connector_name: Literal["merge"] - settings: ItemConnectorsMergeConnectionSettingsSettings + settings: ConnectorsMergeConnectionSettingsSettings id: Optional[str] = None @@ -1505,7 +1503,7 @@ class ItemConnectorsMergeConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1521,8 +1519,8 @@ class ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentialsRaw(BaseM scope: Optional[str] = None -class ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1535,7 +1533,7 @@ class ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentials(BaseMode refresh_token: Optional[str] = None -class ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsMicrosoftConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1547,32 +1545,32 @@ class ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthConnectionConfig(Bas def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsMicrosoftConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentials +class ConnectorsMicrosoftConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsMicrosoftConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsMicrosoftConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsMicrosoftConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsMicrosoftConnectionSettingsSettingsError(BaseModel): +class ConnectorsMicrosoftConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsMicrosoftConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsMicrosoftConnectionSettingsSettingsOAuth +class ConnectorsMicrosoftConnectionSettingsSettings(BaseModel): + oauth: ConnectorsMicrosoftConnectionSettingsSettingsOAuth client_id: Optional[str] = None - error: Optional[ItemConnectorsMicrosoftConnectionSettingsSettingsError] = None + error: Optional[ConnectorsMicrosoftConnectionSettingsSettingsError] = None -class ItemConnectorsMicrosoftConnectionSettings(BaseModel): +class ConnectorsMicrosoftConnectionSettings(BaseModel): connector_name: Literal["microsoft"] - settings: ItemConnectorsMicrosoftConnectionSettingsSettings + settings: ConnectorsMicrosoftConnectionSettingsSettings id: Optional[str] = None @@ -1583,16 +1581,16 @@ class ItemConnectorsMicrosoftConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMongoDBConnectionSettingsSettings(BaseModel): +class ConnectorsMongoDBConnectionSettingsSettings(BaseModel): database_name: str = FieldInfo(alias="databaseName") database_url: str = FieldInfo(alias="databaseUrl") -class ItemConnectorsMongoDBConnectionSettings(BaseModel): +class ConnectorsMongoDBConnectionSettings(BaseModel): connector_name: Literal["mongodb"] - settings: ItemConnectorsMongoDBConnectionSettingsSettings + settings: ConnectorsMongoDBConnectionSettingsSettings id: Optional[str] = None @@ -1603,7 +1601,7 @@ class ItemConnectorsMongoDBConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsMootaConnectionSettings(BaseModel): +class ConnectorsMootaConnectionSettings(BaseModel): connector_name: Literal["moota"] settings: None @@ -1617,14 +1615,14 @@ class ItemConnectorsMootaConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsOnebrickConnectionSettingsSettings(BaseModel): +class ConnectorsOnebrickConnectionSettingsSettings(BaseModel): access_token: str = FieldInfo(alias="accessToken") -class ItemConnectorsOnebrickConnectionSettings(BaseModel): +class ConnectorsOnebrickConnectionSettings(BaseModel): connector_name: Literal["onebrick"] - settings: ItemConnectorsOnebrickConnectionSettingsSettings + settings: ConnectorsOnebrickConnectionSettingsSettings id: Optional[str] = None @@ -1635,7 +1633,7 @@ class ItemConnectorsOnebrickConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsOutreachConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsOutreachConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1651,8 +1649,8 @@ class ItemConnectorsOutreachConnectionSettingsSettingsOAuthCredentialsRaw(BaseMo scope: Optional[str] = None -class ItemConnectorsOutreachConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsOutreachConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsOutreachConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsOutreachConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1665,7 +1663,7 @@ class ItemConnectorsOutreachConnectionSettingsSettingsOAuthCredentials(BaseModel refresh_token: Optional[str] = None -class ItemConnectorsOutreachConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsOutreachConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1677,30 +1675,30 @@ class ItemConnectorsOutreachConnectionSettingsSettingsOAuthConnectionConfig(Base def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsOutreachConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsOutreachConnectionSettingsSettingsOAuthCredentials +class ConnectorsOutreachConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsOutreachConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsOutreachConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsOutreachConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsOutreachConnectionSettingsSettingsError(BaseModel): +class ConnectorsOutreachConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsOutreachConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsOutreachConnectionSettingsSettingsOAuth +class ConnectorsOutreachConnectionSettingsSettings(BaseModel): + oauth: ConnectorsOutreachConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsOutreachConnectionSettingsSettingsError] = None + error: Optional[ConnectorsOutreachConnectionSettingsSettingsError] = None -class ItemConnectorsOutreachConnectionSettings(BaseModel): +class ConnectorsOutreachConnectionSettings(BaseModel): connector_name: Literal["outreach"] - settings: ItemConnectorsOutreachConnectionSettingsSettings + settings: ConnectorsOutreachConnectionSettingsSettings id: Optional[str] = None @@ -1711,7 +1709,7 @@ class ItemConnectorsOutreachConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsPipedriveConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsPipedriveConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1727,8 +1725,8 @@ class ItemConnectorsPipedriveConnectionSettingsSettingsOAuthCredentialsRaw(BaseM scope: Optional[str] = None -class ItemConnectorsPipedriveConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsPipedriveConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsPipedriveConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsPipedriveConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1741,7 +1739,7 @@ class ItemConnectorsPipedriveConnectionSettingsSettingsOAuthCredentials(BaseMode refresh_token: Optional[str] = None -class ItemConnectorsPipedriveConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsPipedriveConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1753,30 +1751,30 @@ class ItemConnectorsPipedriveConnectionSettingsSettingsOAuthConnectionConfig(Bas def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsPipedriveConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsPipedriveConnectionSettingsSettingsOAuthCredentials +class ConnectorsPipedriveConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsPipedriveConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsPipedriveConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsPipedriveConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsPipedriveConnectionSettingsSettingsError(BaseModel): +class ConnectorsPipedriveConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsPipedriveConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsPipedriveConnectionSettingsSettingsOAuth +class ConnectorsPipedriveConnectionSettingsSettings(BaseModel): + oauth: ConnectorsPipedriveConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsPipedriveConnectionSettingsSettingsError] = None + error: Optional[ConnectorsPipedriveConnectionSettingsSettingsError] = None -class ItemConnectorsPipedriveConnectionSettings(BaseModel): +class ConnectorsPipedriveConnectionSettings(BaseModel): connector_name: Literal["pipedrive"] - settings: ItemConnectorsPipedriveConnectionSettingsSettings + settings: ConnectorsPipedriveConnectionSettingsSettings id: Optional[str] = None @@ -1787,7 +1785,7 @@ class ItemConnectorsPipedriveConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsPlaidConnectionSettingsSettings(BaseModel): +class ConnectorsPlaidConnectionSettingsSettings(BaseModel): access_token: str = FieldInfo(alias="accessToken") institution: Optional[object] = None @@ -1801,10 +1799,10 @@ class ItemConnectorsPlaidConnectionSettingsSettings(BaseModel): webhook_item_error: None = FieldInfo(alias="webhookItemError", default=None) -class ItemConnectorsPlaidConnectionSettings(BaseModel): +class ConnectorsPlaidConnectionSettings(BaseModel): connector_name: Literal["plaid"] - settings: ItemConnectorsPlaidConnectionSettingsSettings + settings: ConnectorsPlaidConnectionSettingsSettings id: Optional[str] = None @@ -1815,24 +1813,24 @@ class ItemConnectorsPlaidConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsPostgresConnectionSettingsSettingsSourceQueries(BaseModel): +class ConnectorsPostgresConnectionSettingsSettingsSourceQueries(BaseModel): invoice: Optional[str] = None -class ItemConnectorsPostgresConnectionSettingsSettings(BaseModel): +class ConnectorsPostgresConnectionSettingsSettings(BaseModel): database_url: str = FieldInfo(alias="databaseUrl") migrate_tables: Optional[bool] = FieldInfo(alias="migrateTables", default=None) - source_queries: Optional[ItemConnectorsPostgresConnectionSettingsSettingsSourceQueries] = FieldInfo( + source_queries: Optional[ConnectorsPostgresConnectionSettingsSettingsSourceQueries] = FieldInfo( alias="sourceQueries", default=None ) -class ItemConnectorsPostgresConnectionSettings(BaseModel): +class ConnectorsPostgresConnectionSettings(BaseModel): connector_name: Literal["postgres"] - settings: ItemConnectorsPostgresConnectionSettingsSettings + settings: ConnectorsPostgresConnectionSettingsSettings id: Optional[str] = None @@ -1843,11 +1841,11 @@ class ItemConnectorsPostgresConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsQboConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsQboConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): realm_id: str = FieldInfo(alias="realmId") -class ItemConnectorsQboConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsQboConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1863,8 +1861,8 @@ class ItemConnectorsQboConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): scope: Optional[str] = None -class ItemConnectorsQboConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsQboConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsQboConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsQboConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1877,30 +1875,30 @@ class ItemConnectorsQboConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsQboConnectionSettingsSettingsOAuth(BaseModel): - connection_config: ItemConnectorsQboConnectionSettingsSettingsOAuthConnectionConfig +class ConnectorsQboConnectionSettingsSettingsOAuth(BaseModel): + connection_config: ConnectorsQboConnectionSettingsSettingsOAuthConnectionConfig - credentials: ItemConnectorsQboConnectionSettingsSettingsOAuthCredentials + credentials: ConnectorsQboConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None -class ItemConnectorsQboConnectionSettingsSettingsError(BaseModel): +class ConnectorsQboConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsQboConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsQboConnectionSettingsSettingsOAuth +class ConnectorsQboConnectionSettingsSettings(BaseModel): + oauth: ConnectorsQboConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsQboConnectionSettingsSettingsError] = None + error: Optional[ConnectorsQboConnectionSettingsSettingsError] = None -class ItemConnectorsQboConnectionSettings(BaseModel): +class ConnectorsQboConnectionSettings(BaseModel): connector_name: Literal["qbo"] - settings: ItemConnectorsQboConnectionSettingsSettings + settings: ConnectorsQboConnectionSettingsSettings id: Optional[str] = None @@ -1911,16 +1909,16 @@ class ItemConnectorsQboConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsRampConnectionSettingsSettings(BaseModel): +class ConnectorsRampConnectionSettingsSettings(BaseModel): access_token: Optional[str] = FieldInfo(alias="accessToken", default=None) start_after_transaction_id: Optional[str] = FieldInfo(alias="startAfterTransactionId", default=None) -class ItemConnectorsRampConnectionSettings(BaseModel): +class ConnectorsRampConnectionSettings(BaseModel): connector_name: Literal["ramp"] - settings: ItemConnectorsRampConnectionSettingsSettings + settings: ConnectorsRampConnectionSettingsSettings id: Optional[str] = None @@ -1931,14 +1929,14 @@ class ItemConnectorsRampConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsRevertConnectionSettingsSettings(BaseModel): +class ConnectorsRevertConnectionSettingsSettings(BaseModel): tenant_id: str -class ItemConnectorsRevertConnectionSettings(BaseModel): +class ConnectorsRevertConnectionSettings(BaseModel): connector_name: Literal["revert"] - settings: ItemConnectorsRevertConnectionSettingsSettings + settings: ConnectorsRevertConnectionSettingsSettings id: Optional[str] = None @@ -1949,7 +1947,7 @@ class ItemConnectorsRevertConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSalesforceConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsSalesforceConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -1965,8 +1963,8 @@ class ItemConnectorsSalesforceConnectionSettingsSettingsOAuthCredentialsRaw(Base scope: Optional[str] = None -class ItemConnectorsSalesforceConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsSalesforceConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsSalesforceConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsSalesforceConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -1979,7 +1977,7 @@ class ItemConnectorsSalesforceConnectionSettingsSettingsOAuthCredentials(BaseMod refresh_token: Optional[str] = None -class ItemConnectorsSalesforceConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsSalesforceConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -1991,30 +1989,30 @@ class ItemConnectorsSalesforceConnectionSettingsSettingsOAuthConnectionConfig(Ba def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsSalesforceConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsSalesforceConnectionSettingsSettingsOAuthCredentials +class ConnectorsSalesforceConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsSalesforceConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsSalesforceConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsSalesforceConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsSalesforceConnectionSettingsSettingsError(BaseModel): +class ConnectorsSalesforceConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsSalesforceConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsSalesforceConnectionSettingsSettingsOAuth +class ConnectorsSalesforceConnectionSettingsSettings(BaseModel): + oauth: ConnectorsSalesforceConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsSalesforceConnectionSettingsSettingsError] = None + error: Optional[ConnectorsSalesforceConnectionSettingsSettingsError] = None -class ItemConnectorsSalesforceConnectionSettings(BaseModel): +class ConnectorsSalesforceConnectionSettings(BaseModel): connector_name: Literal["salesforce"] - settings: ItemConnectorsSalesforceConnectionSettingsSettings + settings: ConnectorsSalesforceConnectionSettingsSettings id: Optional[str] = None @@ -2025,7 +2023,7 @@ class ItemConnectorsSalesforceConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSalesloftConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsSalesloftConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -2041,8 +2039,8 @@ class ItemConnectorsSalesloftConnectionSettingsSettingsOAuthCredentialsRaw(BaseM scope: Optional[str] = None -class ItemConnectorsSalesloftConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsSalesloftConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsSalesloftConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsSalesloftConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -2055,7 +2053,7 @@ class ItemConnectorsSalesloftConnectionSettingsSettingsOAuthCredentials(BaseMode refresh_token: Optional[str] = None -class ItemConnectorsSalesloftConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsSalesloftConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -2067,30 +2065,30 @@ class ItemConnectorsSalesloftConnectionSettingsSettingsOAuthConnectionConfig(Bas def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsSalesloftConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsSalesloftConnectionSettingsSettingsOAuthCredentials +class ConnectorsSalesloftConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsSalesloftConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsSalesloftConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsSalesloftConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsSalesloftConnectionSettingsSettingsError(BaseModel): +class ConnectorsSalesloftConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsSalesloftConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsSalesloftConnectionSettingsSettingsOAuth +class ConnectorsSalesloftConnectionSettingsSettings(BaseModel): + oauth: ConnectorsSalesloftConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsSalesloftConnectionSettingsSettingsError] = None + error: Optional[ConnectorsSalesloftConnectionSettingsSettingsError] = None -class ItemConnectorsSalesloftConnectionSettings(BaseModel): +class ConnectorsSalesloftConnectionSettings(BaseModel): connector_name: Literal["salesloft"] - settings: ItemConnectorsSalesloftConnectionSettingsSettings + settings: ConnectorsSalesloftConnectionSettingsSettings id: Optional[str] = None @@ -2101,7 +2099,7 @@ class ItemConnectorsSalesloftConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSaltedgeConnectionSettings(BaseModel): +class ConnectorsSaltedgeConnectionSettings(BaseModel): connector_name: Literal["saltedge"] id: Optional[str] = None @@ -2115,7 +2113,7 @@ class ItemConnectorsSaltedgeConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSlackConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsSlackConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -2131,8 +2129,8 @@ class ItemConnectorsSlackConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel scope: Optional[str] = None -class ItemConnectorsSlackConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsSlackConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsSlackConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsSlackConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -2145,7 +2143,7 @@ class ItemConnectorsSlackConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsSlackConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsSlackConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -2157,30 +2155,30 @@ class ItemConnectorsSlackConnectionSettingsSettingsOAuthConnectionConfig(BaseMod def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsSlackConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsSlackConnectionSettingsSettingsOAuthCredentials +class ConnectorsSlackConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsSlackConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsSlackConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsSlackConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsSlackConnectionSettingsSettingsError(BaseModel): +class ConnectorsSlackConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsSlackConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsSlackConnectionSettingsSettingsOAuth +class ConnectorsSlackConnectionSettingsSettings(BaseModel): + oauth: ConnectorsSlackConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsSlackConnectionSettingsSettingsError] = None + error: Optional[ConnectorsSlackConnectionSettingsSettingsError] = None -class ItemConnectorsSlackConnectionSettings(BaseModel): +class ConnectorsSlackConnectionSettings(BaseModel): connector_name: Literal["slack"] - settings: ItemConnectorsSlackConnectionSettingsSettings + settings: ConnectorsSlackConnectionSettingsSettings id: Optional[str] = None @@ -2191,7 +2189,7 @@ class ItemConnectorsSlackConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUserNotifications(BaseModel): +class ConnectorsSplitwiseConnectionSettingsSettingsCurrentUserNotifications(BaseModel): added_as_friend: bool added_to_group: bool @@ -2209,7 +2207,7 @@ class ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUserNotifications( payments: bool -class ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUserPicture(BaseModel): +class ConnectorsSplitwiseConnectionSettingsSettingsCurrentUserPicture(BaseModel): large: Optional[str] = None medium: Optional[str] = None @@ -2223,7 +2221,7 @@ class ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUserPicture(BaseMo xxlarge: Optional[str] = None -class ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUser(BaseModel): +class ConnectorsSplitwiseConnectionSettingsSettingsCurrentUser(BaseModel): id: float country_code: str @@ -2246,29 +2244,29 @@ class ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUser(BaseModel): locale: str - notifications: ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUserNotifications + notifications: ConnectorsSplitwiseConnectionSettingsSettingsCurrentUserNotifications notifications_count: float notifications_read: str - picture: ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUserPicture + picture: ConnectorsSplitwiseConnectionSettingsSettingsCurrentUserPicture registration_status: str -class ItemConnectorsSplitwiseConnectionSettingsSettings(BaseModel): +class ConnectorsSplitwiseConnectionSettingsSettings(BaseModel): access_token: str = FieldInfo(alias="accessToken") - current_user: Optional[ItemConnectorsSplitwiseConnectionSettingsSettingsCurrentUser] = FieldInfo( + current_user: Optional[ConnectorsSplitwiseConnectionSettingsSettingsCurrentUser] = FieldInfo( alias="currentUser", default=None ) -class ItemConnectorsSplitwiseConnectionSettings(BaseModel): +class ConnectorsSplitwiseConnectionSettings(BaseModel): connector_name: Literal["splitwise"] - settings: ItemConnectorsSplitwiseConnectionSettingsSettings + settings: ConnectorsSplitwiseConnectionSettingsSettings id: Optional[str] = None @@ -2279,7 +2277,7 @@ class ItemConnectorsSplitwiseConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsSpreadsheetConnectionSettingsSettings(BaseModel): +class ConnectorsSpreadsheetConnectionSettingsSettings(BaseModel): account_external_id: str = FieldInfo(alias="accountExternalId") preset: Literal[ @@ -2299,10 +2297,10 @@ class ItemConnectorsSpreadsheetConnectionSettingsSettings(BaseModel): ] -class ItemConnectorsSpreadsheetConnectionSettings(BaseModel): +class ConnectorsSpreadsheetConnectionSettings(BaseModel): connector_name: Literal["spreadsheet"] - settings: ItemConnectorsSpreadsheetConnectionSettingsSettings + settings: ConnectorsSpreadsheetConnectionSettingsSettings id: Optional[str] = None @@ -2313,14 +2311,14 @@ class ItemConnectorsSpreadsheetConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsStripeConnectionSettingsSettings(BaseModel): +class ConnectorsStripeConnectionSettingsSettings(BaseModel): secret_key: str = FieldInfo(alias="secretKey") -class ItemConnectorsStripeConnectionSettings(BaseModel): +class ConnectorsStripeConnectionSettings(BaseModel): connector_name: Literal["stripe"] - settings: ItemConnectorsStripeConnectionSettingsSettings + settings: ConnectorsStripeConnectionSettingsSettings id: Optional[str] = None @@ -2331,14 +2329,14 @@ class ItemConnectorsStripeConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsTellerConnectionSettingsSettings(BaseModel): +class ConnectorsTellerConnectionSettingsSettings(BaseModel): token: str -class ItemConnectorsTellerConnectionSettings(BaseModel): +class ConnectorsTellerConnectionSettings(BaseModel): connector_name: Literal["teller"] - settings: ItemConnectorsTellerConnectionSettingsSettings + settings: ConnectorsTellerConnectionSettingsSettings id: Optional[str] = None @@ -2349,7 +2347,7 @@ class ItemConnectorsTellerConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsTogglConnectionSettingsSettings(BaseModel): +class ConnectorsTogglConnectionSettingsSettings(BaseModel): api_token: str = FieldInfo(alias="apiToken") email: Optional[str] = None @@ -2357,10 +2355,10 @@ class ItemConnectorsTogglConnectionSettingsSettings(BaseModel): password: Optional[str] = None -class ItemConnectorsTogglConnectionSettings(BaseModel): +class ConnectorsTogglConnectionSettings(BaseModel): connector_name: Literal["toggl"] - settings: ItemConnectorsTogglConnectionSettingsSettings + settings: ConnectorsTogglConnectionSettingsSettings id: Optional[str] = None @@ -2371,14 +2369,14 @@ class ItemConnectorsTogglConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsTwentyConnectionSettingsSettings(BaseModel): +class ConnectorsTwentyConnectionSettingsSettings(BaseModel): access_token: str -class ItemConnectorsTwentyConnectionSettings(BaseModel): +class ConnectorsTwentyConnectionSettings(BaseModel): connector_name: Literal["twenty"] - settings: ItemConnectorsTwentyConnectionSettingsSettings + settings: ConnectorsTwentyConnectionSettingsSettings id: Optional[str] = None @@ -2389,16 +2387,16 @@ class ItemConnectorsTwentyConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsVenmoConnectionSettingsSettings(BaseModel): +class ConnectorsVenmoConnectionSettingsSettings(BaseModel): credentials: Optional[object] = None me: Optional[object] = None -class ItemConnectorsVenmoConnectionSettings(BaseModel): +class ConnectorsVenmoConnectionSettings(BaseModel): connector_name: Literal["venmo"] - settings: ItemConnectorsVenmoConnectionSettingsSettings + settings: ConnectorsVenmoConnectionSettingsSettings id: Optional[str] = None @@ -2409,14 +2407,14 @@ class ItemConnectorsVenmoConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsWebhookConnectionSettingsSettings(BaseModel): +class ConnectorsWebhookConnectionSettingsSettings(BaseModel): destination_url: str = FieldInfo(alias="destinationUrl") -class ItemConnectorsWebhookConnectionSettings(BaseModel): +class ConnectorsWebhookConnectionSettings(BaseModel): connector_name: Literal["webhook"] - settings: ItemConnectorsWebhookConnectionSettingsSettings + settings: ConnectorsWebhookConnectionSettingsSettings id: Optional[str] = None @@ -2427,16 +2425,16 @@ class ItemConnectorsWebhookConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsWiseConnectionSettingsSettings(BaseModel): +class ConnectorsWiseConnectionSettingsSettings(BaseModel): env_name: Literal["sandbox", "live"] = FieldInfo(alias="envName") api_token: Optional[str] = FieldInfo(alias="apiToken", default=None) -class ItemConnectorsWiseConnectionSettings(BaseModel): +class ConnectorsWiseConnectionSettings(BaseModel): connector_name: Literal["wise"] - settings: ItemConnectorsWiseConnectionSettingsSettings + settings: ConnectorsWiseConnectionSettingsSettings id: Optional[str] = None @@ -2447,7 +2445,7 @@ class ItemConnectorsWiseConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsXeroConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsXeroConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -2463,8 +2461,8 @@ class ItemConnectorsXeroConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel) scope: Optional[str] = None -class ItemConnectorsXeroConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsXeroConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsXeroConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsXeroConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -2477,7 +2475,7 @@ class ItemConnectorsXeroConnectionSettingsSettingsOAuthCredentials(BaseModel): refresh_token: Optional[str] = None -class ItemConnectorsXeroConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsXeroConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -2489,30 +2487,30 @@ class ItemConnectorsXeroConnectionSettingsSettingsOAuthConnectionConfig(BaseMode def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsXeroConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsXeroConnectionSettingsSettingsOAuthCredentials +class ConnectorsXeroConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsXeroConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsXeroConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsXeroConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsXeroConnectionSettingsSettingsError(BaseModel): +class ConnectorsXeroConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsXeroConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsXeroConnectionSettingsSettingsOAuth +class ConnectorsXeroConnectionSettingsSettings(BaseModel): + oauth: ConnectorsXeroConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsXeroConnectionSettingsSettingsError] = None + error: Optional[ConnectorsXeroConnectionSettingsSettingsError] = None -class ItemConnectorsXeroConnectionSettings(BaseModel): +class ConnectorsXeroConnectionSettings(BaseModel): connector_name: Literal["xero"] - settings: ItemConnectorsXeroConnectionSettingsSettings + settings: ConnectorsXeroConnectionSettingsSettings id: Optional[str] = None @@ -2523,7 +2521,7 @@ class ItemConnectorsXeroConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsYodleeConnectionSettingsSettingsAccessToken(BaseModel): +class ConnectorsYodleeConnectionSettingsSettingsAccessToken(BaseModel): access_token: str = FieldInfo(alias="accessToken") expires_in: float = FieldInfo(alias="expiresIn") @@ -2531,7 +2529,7 @@ class ItemConnectorsYodleeConnectionSettingsSettingsAccessToken(BaseModel): issued_at: str = FieldInfo(alias="issuedAt") -class ItemConnectorsYodleeConnectionSettingsSettingsProviderAccount(BaseModel): +class ConnectorsYodleeConnectionSettingsSettingsProviderAccount(BaseModel): id: float aggregation_source: str = FieldInfo(alias="aggregationSource") @@ -2549,28 +2547,28 @@ class ItemConnectorsYodleeConnectionSettingsSettingsProviderAccount(BaseModel): is_deleted: Optional[bool] = FieldInfo(alias="isDeleted", default=None) -class ItemConnectorsYodleeConnectionSettingsSettings(BaseModel): +class ConnectorsYodleeConnectionSettingsSettings(BaseModel): login_name: str = FieldInfo(alias="loginName") provider_account_id: Union[float, str] = FieldInfo(alias="providerAccountId") - access_token: Optional[ItemConnectorsYodleeConnectionSettingsSettingsAccessToken] = FieldInfo( + access_token: Optional[ConnectorsYodleeConnectionSettingsSettingsAccessToken] = FieldInfo( alias="accessToken", default=None ) provider: None = None - provider_account: Optional[ItemConnectorsYodleeConnectionSettingsSettingsProviderAccount] = FieldInfo( + provider_account: Optional[ConnectorsYodleeConnectionSettingsSettingsProviderAccount] = FieldInfo( alias="providerAccount", default=None ) user: None = None -class ItemConnectorsYodleeConnectionSettings(BaseModel): +class ConnectorsYodleeConnectionSettings(BaseModel): connector_name: Literal["yodlee"] - settings: ItemConnectorsYodleeConnectionSettingsSettings + settings: ConnectorsYodleeConnectionSettingsSettings id: Optional[str] = None @@ -2581,7 +2579,7 @@ class ItemConnectorsYodleeConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsZohodeskConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): +class ConnectorsZohodeskConnectionSettingsSettingsOAuthCredentialsRaw(BaseModel): access_token: str token_type: str @@ -2597,8 +2595,8 @@ class ItemConnectorsZohodeskConnectionSettingsSettingsOAuthCredentialsRaw(BaseMo scope: Optional[str] = None -class ItemConnectorsZohodeskConnectionSettingsSettingsOAuthCredentials(BaseModel): - raw: ItemConnectorsZohodeskConnectionSettingsSettingsOAuthCredentialsRaw +class ConnectorsZohodeskConnectionSettingsSettingsOAuthCredentials(BaseModel): + raw: ConnectorsZohodeskConnectionSettingsSettingsOAuthCredentialsRaw type: Literal["OAUTH2", "OAUTH1", "BASIC", "API_KEY"] @@ -2611,7 +2609,7 @@ class ItemConnectorsZohodeskConnectionSettingsSettingsOAuthCredentials(BaseModel refresh_token: Optional[str] = None -class ItemConnectorsZohodeskConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): +class ConnectorsZohodeskConnectionSettingsSettingsOAuthConnectionConfig(BaseModel): instance_url: Optional[str] = None portal_id: Optional[float] = FieldInfo(alias="portalId", default=None) @@ -2623,30 +2621,30 @@ class ItemConnectorsZohodeskConnectionSettingsSettingsOAuthConnectionConfig(Base def __getattr__(self, attr: str) -> object: ... -class ItemConnectorsZohodeskConnectionSettingsSettingsOAuth(BaseModel): - credentials: ItemConnectorsZohodeskConnectionSettingsSettingsOAuthCredentials +class ConnectorsZohodeskConnectionSettingsSettingsOAuth(BaseModel): + credentials: ConnectorsZohodeskConnectionSettingsSettingsOAuthCredentials metadata: Optional[Dict[str, object]] = None - connection_config: Optional[ItemConnectorsZohodeskConnectionSettingsSettingsOAuthConnectionConfig] = None + connection_config: Optional[ConnectorsZohodeskConnectionSettingsSettingsOAuthConnectionConfig] = None -class ItemConnectorsZohodeskConnectionSettingsSettingsError(BaseModel): +class ConnectorsZohodeskConnectionSettingsSettingsError(BaseModel): code: Union[Literal["refresh_token_external_error"], str] message: Optional[str] = None -class ItemConnectorsZohodeskConnectionSettingsSettings(BaseModel): - oauth: ItemConnectorsZohodeskConnectionSettingsSettingsOAuth +class ConnectorsZohodeskConnectionSettingsSettings(BaseModel): + oauth: ConnectorsZohodeskConnectionSettingsSettingsOAuth - error: Optional[ItemConnectorsZohodeskConnectionSettingsSettingsError] = None + error: Optional[ConnectorsZohodeskConnectionSettingsSettingsError] = None -class ItemConnectorsZohodeskConnectionSettings(BaseModel): +class ConnectorsZohodeskConnectionSettings(BaseModel): connector_name: Literal["zohodesk"] - settings: ItemConnectorsZohodeskConnectionSettingsSettings + settings: ConnectorsZohodeskConnectionSettingsSettings id: Optional[str] = None @@ -2657,7 +2655,7 @@ class ItemConnectorsZohodeskConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -class ItemConnectorsGoogledriveConnectionSettings(BaseModel): +class ConnectorsGoogledriveConnectionSettings(BaseModel): connector_name: Literal["googledrive"] settings: None @@ -2671,70 +2669,60 @@ class ItemConnectorsGoogledriveConnectionSettings(BaseModel): updated_at: Optional[datetime] = None -Item: TypeAlias = Union[ - ItemConnectorsAircallConnectionSettings, - ItemConnectorsAirtableConnectionSettings, - ItemConnectorsApolloConnectionSettings, - ItemConnectorsBeancountConnectionSettings, - ItemConnectorsBrexConnectionSettings, - ItemConnectorsCodaConnectionSettings, - ItemConnectorsConfluenceConnectionSettings, - ItemConnectorsDebugConnectionSettings, - ItemConnectorsDiscordConnectionSettings, - ItemConnectorsFinchConnectionSettings, - ItemConnectorsFirebaseConnectionSettings, - ItemConnectorsForeceiptConnectionSettings, - ItemConnectorsFsConnectionSettings, - ItemConnectorsGitHubConnectionSettings, - ItemConnectorsGongConnectionSettings, - ItemConnectorsGoogleConnectionSettings, - ItemConnectorsGreenhouseConnectionSettings, - ItemConnectorsHeronConnectionSettings, - ItemConnectorsHubspotConnectionSettings, - ItemConnectorsIntercomConnectionSettings, - ItemConnectorsJiraConnectionSettings, - ItemConnectorsKustomerConnectionSettings, - ItemConnectorsLeverConnectionSettings, - ItemConnectorsLinearConnectionSettings, - ItemConnectorsLunchmoneyConnectionSettings, - ItemConnectorsMercuryConnectionSettings, - ItemConnectorsMergeConnectionSettings, - ItemConnectorsMicrosoftConnectionSettings, - ItemConnectorsMongoDBConnectionSettings, - ItemConnectorsMootaConnectionSettings, - ItemConnectorsOnebrickConnectionSettings, - ItemConnectorsOutreachConnectionSettings, - ItemConnectorsPipedriveConnectionSettings, - ItemConnectorsPlaidConnectionSettings, - ItemConnectorsPostgresConnectionSettings, - ItemConnectorsQboConnectionSettings, - ItemConnectorsRampConnectionSettings, - ItemConnectorsRevertConnectionSettings, - ItemConnectorsSalesforceConnectionSettings, - ItemConnectorsSalesloftConnectionSettings, - ItemConnectorsSaltedgeConnectionSettings, - ItemConnectorsSlackConnectionSettings, - ItemConnectorsSplitwiseConnectionSettings, - ItemConnectorsSpreadsheetConnectionSettings, - ItemConnectorsStripeConnectionSettings, - ItemConnectorsTellerConnectionSettings, - ItemConnectorsTogglConnectionSettings, - ItemConnectorsTwentyConnectionSettings, - ItemConnectorsVenmoConnectionSettings, - ItemConnectorsWebhookConnectionSettings, - ItemConnectorsWiseConnectionSettings, - ItemConnectorsXeroConnectionSettings, - ItemConnectorsYodleeConnectionSettings, - ItemConnectorsZohodeskConnectionSettings, - ItemConnectorsGoogledriveConnectionSettings, +GetConnectionResponse: TypeAlias = Union[ + ConnectorsAircallConnectionSettings, + ConnectorsAirtableConnectionSettings, + ConnectorsApolloConnectionSettings, + ConnectorsBeancountConnectionSettings, + ConnectorsBrexConnectionSettings, + ConnectorsCodaConnectionSettings, + ConnectorsConfluenceConnectionSettings, + ConnectorsDebugConnectionSettings, + ConnectorsDiscordConnectionSettings, + ConnectorsFinchConnectionSettings, + ConnectorsFirebaseConnectionSettings, + ConnectorsForeceiptConnectionSettings, + ConnectorsFsConnectionSettings, + ConnectorsGitHubConnectionSettings, + ConnectorsGongConnectionSettings, + ConnectorsGoogleConnectionSettings, + ConnectorsGreenhouseConnectionSettings, + ConnectorsHeronConnectionSettings, + ConnectorsHubspotConnectionSettings, + ConnectorsIntercomConnectionSettings, + ConnectorsJiraConnectionSettings, + ConnectorsKustomerConnectionSettings, + ConnectorsLeverConnectionSettings, + ConnectorsLinearConnectionSettings, + ConnectorsLunchmoneyConnectionSettings, + ConnectorsMercuryConnectionSettings, + ConnectorsMergeConnectionSettings, + ConnectorsMicrosoftConnectionSettings, + ConnectorsMongoDBConnectionSettings, + ConnectorsMootaConnectionSettings, + ConnectorsOnebrickConnectionSettings, + ConnectorsOutreachConnectionSettings, + ConnectorsPipedriveConnectionSettings, + ConnectorsPlaidConnectionSettings, + ConnectorsPostgresConnectionSettings, + ConnectorsQboConnectionSettings, + ConnectorsRampConnectionSettings, + ConnectorsRevertConnectionSettings, + ConnectorsSalesforceConnectionSettings, + ConnectorsSalesloftConnectionSettings, + ConnectorsSaltedgeConnectionSettings, + ConnectorsSlackConnectionSettings, + ConnectorsSplitwiseConnectionSettings, + ConnectorsSpreadsheetConnectionSettings, + ConnectorsStripeConnectionSettings, + ConnectorsTellerConnectionSettings, + ConnectorsTogglConnectionSettings, + ConnectorsTwentyConnectionSettings, + ConnectorsVenmoConnectionSettings, + ConnectorsWebhookConnectionSettings, + ConnectorsWiseConnectionSettings, + ConnectorsXeroConnectionSettings, + ConnectorsYodleeConnectionSettings, + ConnectorsZohodeskConnectionSettings, + ConnectorsGoogledriveConnectionSettings, ] - - -class GetConnectionResponse(BaseModel): - items: List[Item] - - limit: int - - offset: int - - total: float diff --git a/tests/api_resources/test_client.py b/tests/api_resources/test_client.py index 7cc8e7f..448c0c1 100644 --- a/tests/api_resources/test_client.py +++ b/tests/api_resources/test_client.py @@ -163,27 +163,28 @@ def test_streaming_response_create_token(self, client: Openint) -> None: @pytest.mark.skip() @parametrize def test_method_get_connection(self, client: Openint) -> None: - client_ = client.get_connection() + client_ = client.get_connection( + id="id", + ) assert_matches_type(GetConnectionResponse, client_, path=["response"]) @pytest.mark.skip() @parametrize def test_method_get_connection_with_all_params(self, client: Openint) -> None: client_ = client.get_connection( - connector_config_id="connector_config_id", - connector_name="aircall", - customer_id="x", + id="id", expand=["connector"], include_secrets="none", - limit=1, - offset=0, + refresh_policy="none", ) assert_matches_type(GetConnectionResponse, client_, path=["response"]) @pytest.mark.skip() @parametrize def test_raw_response_get_connection(self, client: Openint) -> None: - response = client.with_raw_response.get_connection() + response = client.with_raw_response.get_connection( + id="id", + ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -193,7 +194,9 @@ def test_raw_response_get_connection(self, client: Openint) -> None: @pytest.mark.skip() @parametrize def test_streaming_response_get_connection(self, client: Openint) -> None: - with client.with_streaming_response.get_connection() as response: + with client.with_streaming_response.get_connection( + id="id", + ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -202,6 +205,14 @@ def test_streaming_response_get_connection(self, client: Openint) -> None: assert cast(Any, response.is_closed) is True + @pytest.mark.skip() + @parametrize + def test_path_params_get_connection(self, client: Openint) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): + client.with_raw_response.get_connection( + id="", + ) + @pytest.mark.skip() @parametrize def test_method_list_connection_configs(self, client: Openint) -> None: @@ -244,56 +255,45 @@ def test_streaming_response_list_connection_configs(self, client: Openint) -> No @pytest.mark.skip() @parametrize def test_method_list_connections(self, client: Openint) -> None: - client_ = client.list_connections( - id="id", - ) - assert_matches_type(ListConnectionsResponse, client_, path=["response"]) + client_ = client.list_connections() + assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize def test_method_list_connections_with_all_params(self, client: Openint) -> None: client_ = client.list_connections( - id="id", + connector_config_id="connector_config_id", + connector_name="aircall", + customer_id="x", expand=["connector"], include_secrets="none", - refresh_policy="none", + limit=1, + offset=0, ) - assert_matches_type(ListConnectionsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize def test_raw_response_list_connections(self, client: Openint) -> None: - response = client.with_raw_response.list_connections( - id="id", - ) + 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(ListConnectionsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) @pytest.mark.skip() @parametrize def test_streaming_response_list_connections(self, client: Openint) -> None: - with client.with_streaming_response.list_connections( - id="id", - ) as response: + 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(ListConnectionsResponse, client_, path=["response"]) + assert_matches_type(SyncOffsetPagination[ListConnectionsResponse], client_, path=["response"]) assert cast(Any, response.is_closed) is True - @pytest.mark.skip() - @parametrize - def test_path_params_list_connections(self, client: Openint) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): - client.with_raw_response.list_connections( - id="", - ) - @pytest.mark.skip() @parametrize def test_method_list_events(self, client: Openint) -> None: @@ -472,27 +472,28 @@ async def test_streaming_response_create_token(self, async_client: AsyncOpenint) @pytest.mark.skip() @parametrize async def test_method_get_connection(self, async_client: AsyncOpenint) -> None: - client = await async_client.get_connection() + client = await async_client.get_connection( + id="id", + ) assert_matches_type(GetConnectionResponse, client, path=["response"]) @pytest.mark.skip() @parametrize async def test_method_get_connection_with_all_params(self, async_client: AsyncOpenint) -> None: client = await async_client.get_connection( - connector_config_id="connector_config_id", - connector_name="aircall", - customer_id="x", + id="id", expand=["connector"], include_secrets="none", - limit=1, - offset=0, + refresh_policy="none", ) assert_matches_type(GetConnectionResponse, client, path=["response"]) @pytest.mark.skip() @parametrize async def test_raw_response_get_connection(self, async_client: AsyncOpenint) -> None: - response = await async_client.with_raw_response.get_connection() + response = await async_client.with_raw_response.get_connection( + id="id", + ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -502,7 +503,9 @@ async def test_raw_response_get_connection(self, async_client: AsyncOpenint) -> @pytest.mark.skip() @parametrize async def test_streaming_response_get_connection(self, async_client: AsyncOpenint) -> None: - async with async_client.with_streaming_response.get_connection() as response: + async with async_client.with_streaming_response.get_connection( + id="id", + ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -511,6 +514,14 @@ async def test_streaming_response_get_connection(self, async_client: AsyncOpenin assert cast(Any, response.is_closed) is True + @pytest.mark.skip() + @parametrize + async def test_path_params_get_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.get_connection( + id="", + ) + @pytest.mark.skip() @parametrize async def test_method_list_connection_configs(self, async_client: AsyncOpenint) -> None: @@ -553,56 +564,45 @@ async def test_streaming_response_list_connection_configs(self, async_client: As @pytest.mark.skip() @parametrize async def test_method_list_connections(self, async_client: AsyncOpenint) -> None: - client = await async_client.list_connections( - id="id", - ) - assert_matches_type(ListConnectionsResponse, client, path=["response"]) + client = await async_client.list_connections() + assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize async def test_method_list_connections_with_all_params(self, async_client: AsyncOpenint) -> None: client = await async_client.list_connections( - id="id", + connector_config_id="connector_config_id", + connector_name="aircall", + customer_id="x", expand=["connector"], include_secrets="none", - refresh_policy="none", + limit=1, + offset=0, ) - assert_matches_type(ListConnectionsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize async def test_raw_response_list_connections(self, async_client: AsyncOpenint) -> None: - response = await async_client.with_raw_response.list_connections( - id="id", - ) + 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(ListConnectionsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) @pytest.mark.skip() @parametrize async def test_streaming_response_list_connections(self, async_client: AsyncOpenint) -> None: - async with async_client.with_streaming_response.list_connections( - id="id", - ) as response: + 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(ListConnectionsResponse, client, path=["response"]) + assert_matches_type(AsyncOffsetPagination[ListConnectionsResponse], client, path=["response"]) assert cast(Any, response.is_closed) is True - @pytest.mark.skip() - @parametrize - async def test_path_params_list_connections(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.list_connections( - id="", - ) - @pytest.mark.skip() @parametrize async def test_method_list_events(self, async_client: AsyncOpenint) -> None: diff --git a/tests/test_client.py b/tests/test_client.py index c21a2fa..ee6627f 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -24,8 +24,7 @@ from openint import Openint, AsyncOpenint, APIResponseValidationError from openint._types import Omit from openint._models import BaseModel, FinalRequestOptions -from openint._constants import RAW_RESPONSE_HEADER -from openint._exceptions import APIStatusError, APITimeoutError, APIResponseValidationError +from openint._exceptions import APIResponseValidationError from openint._base_client import ( DEFAULT_TIMEOUT, HTTPX_DEFAULT_TIMEOUT, @@ -49,14 +48,6 @@ def _low_retry_timeout(*_args: Any, **_kwargs: Any) -> float: return 0.1 -def _get_open_connections(client: Openint | AsyncOpenint) -> int: - transport = client._client._transport - assert isinstance(transport, httpx.HTTPTransport) or isinstance(transport, httpx.AsyncHTTPTransport) - - pool = transport._pool - return len(pool._requests) - - class TestOpenint: client = Openint(base_url=base_url, api_key=api_key, _strict_response_validation=True) @@ -716,26 +707,6 @@ def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str calculated = client._calculate_retry_timeout(remaining_retries, options, headers) assert calculated == pytest.approx(timeout, 0.5 * 0.875) # pyright: ignore[reportUnknownMemberType] - @mock.patch("openint._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: - respx_mock.get("/connection").mock(side_effect=httpx.TimeoutException("Test timeout error")) - - with pytest.raises(APITimeoutError): - self.client.get("/connection", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}}) - - assert _get_open_connections(self.client) == 0 - - @mock.patch("openint._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: - respx_mock.get("/connection").mock(return_value=httpx.Response(500)) - - with pytest.raises(APIStatusError): - self.client.get("/connection", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}}) - - assert _get_open_connections(self.client) == 0 - @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) @mock.patch("openint._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) @pytest.mark.respx(base_url=base_url) @@ -762,7 +733,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.get("/connection").mock(side_effect=retry_handler) - response = client.with_raw_response.get_connection() + response = client.with_raw_response.list_connections() assert response.retries_taken == failures_before_success assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success @@ -786,7 +757,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.get("/connection").mock(side_effect=retry_handler) - response = client.with_raw_response.get_connection(extra_headers={"x-stainless-retry-count": Omit()}) + response = client.with_raw_response.list_connections(extra_headers={"x-stainless-retry-count": Omit()}) assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0 @@ -809,7 +780,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.get("/connection").mock(side_effect=retry_handler) - response = client.with_raw_response.get_connection(extra_headers={"x-stainless-retry-count": "42"}) + response = client.with_raw_response.list_connections(extra_headers={"x-stainless-retry-count": "42"}) assert response.http_request.headers.get("x-stainless-retry-count") == "42" @@ -1491,30 +1462,6 @@ async def test_parse_retry_after_header(self, remaining_retries: int, retry_afte calculated = client._calculate_retry_timeout(remaining_retries, options, headers) assert calculated == pytest.approx(timeout, 0.5 * 0.875) # pyright: ignore[reportUnknownMemberType] - @mock.patch("openint._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - async def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: - respx_mock.get("/connection").mock(side_effect=httpx.TimeoutException("Test timeout error")) - - with pytest.raises(APITimeoutError): - await self.client.get( - "/connection", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}} - ) - - assert _get_open_connections(self.client) == 0 - - @mock.patch("openint._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) - @pytest.mark.respx(base_url=base_url) - async def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter) -> None: - respx_mock.get("/connection").mock(return_value=httpx.Response(500)) - - with pytest.raises(APIStatusError): - await self.client.get( - "/connection", cast_to=httpx.Response, options={"headers": {RAW_RESPONSE_HEADER: "stream"}} - ) - - assert _get_open_connections(self.client) == 0 - @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) @mock.patch("openint._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout) @pytest.mark.respx(base_url=base_url) @@ -1542,7 +1489,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.get("/connection").mock(side_effect=retry_handler) - response = await client.with_raw_response.get_connection() + response = await client.with_raw_response.list_connections() assert response.retries_taken == failures_before_success assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success @@ -1567,7 +1514,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.get("/connection").mock(side_effect=retry_handler) - response = await client.with_raw_response.get_connection(extra_headers={"x-stainless-retry-count": Omit()}) + response = await client.with_raw_response.list_connections(extra_headers={"x-stainless-retry-count": Omit()}) assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0 @@ -1591,7 +1538,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.get("/connection").mock(side_effect=retry_handler) - response = await client.with_raw_response.get_connection(extra_headers={"x-stainless-retry-count": "42"}) + response = await client.with_raw_response.list_connections(extra_headers={"x-stainless-retry-count": "42"}) assert response.http_request.headers.get("x-stainless-retry-count") == "42" From 6dfc2e881d3b6b113a597c2a9251a00c3203ce84 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:04:19 +0000 Subject: [PATCH 7/9] feat(api): manual updates (#12) --- src/openint/_client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openint/_client.py b/src/openint/_client.py index 1d142e0..f7c0a42 100644 --- a/src/openint/_client.py +++ b/src/openint/_client.py @@ -109,7 +109,7 @@ def __init__( if base_url is None: base_url = os.environ.get("OPENINT_BASE_URL") if base_url is None: - base_url = f"https://localhost:3000" + base_url = f"https://api.openint.dev/v1" super().__init__( version=__version__, @@ -825,7 +825,7 @@ def __init__( if base_url is None: base_url = os.environ.get("OPENINT_BASE_URL") if base_url is None: - base_url = f"https://localhost:3000" + base_url = f"https://api.openint.dev/v1" super().__init__( version=__version__, From 224a7a02297b3b06218ae5f8297c1e829cb91037 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:37:16 +0000 Subject: [PATCH 8/9] feat(api): manual updates (#13) --- .stats.yml | 2 +- tests/api_resources/test_client.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.stats.yml b/.stats.yml index 133e0bf..a25cca2 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,2 +1,2 @@ configured_endpoints: 7 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-ed263d82a28e8475a7ebc5eaa4dfe53255fcd3342d12ec956bf331b169407b3b.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openint%2Fopenint-3c4c569aecc7073dd54b777ab6aa9959eda2a884975a2a9765f79ba8b599df0c.yml diff --git a/tests/api_resources/test_client.py b/tests/api_resources/test_client.py index 448c0c1..e653550 100644 --- a/tests/api_resources/test_client.py +++ b/tests/api_resources/test_client.py @@ -83,7 +83,7 @@ def test_method_create_magic_link_with_all_params(self, client: Openint) -> None customer_id="x", connection_id="connection_id", connector_names="aircall", - email="dev@stainless.com", + email="email", redirect_url="redirect_url", theme="light", validity_in_seconds=0, @@ -392,7 +392,7 @@ async def test_method_create_magic_link_with_all_params(self, async_client: Asyn customer_id="x", connection_id="connection_id", connector_names="aircall", - email="dev@stainless.com", + email="email", redirect_url="redirect_url", theme="light", validity_in_seconds=0, From e2e189937a8e734c5378c58e7e07bb19d23bebc6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:37:36 +0000 Subject: [PATCH 9/9] release: 0.1.0-alpha.2 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 15 +++++++++++++++ pyproject.toml | 2 +- src/openint/_version.py | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ba6c348..f14b480 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0-alpha.1" + ".": "0.1.0-alpha.2" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 141f613..0475d3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 0.1.0-alpha.2 (2025-03-05) + +Full Changelog: [v0.1.0-alpha.1...v0.1.0-alpha.2](https://github.com/openintegrations/python-sdk/compare/v0.1.0-alpha.1...v0.1.0-alpha.2) + +### Features + +* **api:** manual updates ([#10](https://github.com/openintegrations/python-sdk/issues/10)) ([ee8775b](https://github.com/openintegrations/python-sdk/commit/ee8775bcbe538e4ee176ea6b70613f0e7118627f)) +* **api:** manual updates ([#11](https://github.com/openintegrations/python-sdk/issues/11)) ([035fbea](https://github.com/openintegrations/python-sdk/commit/035fbead3a022304829924c9996f434a7cd4a593)) +* **api:** manual updates ([#12](https://github.com/openintegrations/python-sdk/issues/12)) ([6dfc2e8](https://github.com/openintegrations/python-sdk/commit/6dfc2e881d3b6b113a597c2a9251a00c3203ce84)) +* **api:** manual updates ([#13](https://github.com/openintegrations/python-sdk/issues/13)) ([224a7a0](https://github.com/openintegrations/python-sdk/commit/224a7a02297b3b06218ae5f8297c1e829cb91037)) +* **api:** manual updates ([#7](https://github.com/openintegrations/python-sdk/issues/7)) ([6b05d11](https://github.com/openintegrations/python-sdk/commit/6b05d115709fed32c7c6884621ac0959abf75ea1)) +* **api:** manual updates ([#8](https://github.com/openintegrations/python-sdk/issues/8)) ([5054460](https://github.com/openintegrations/python-sdk/commit/5054460f4d5e441afd71fe29a1ab3ef11ec82cba)) +* **api:** manual updates ([#9](https://github.com/openintegrations/python-sdk/issues/9)) ([ac996eb](https://github.com/openintegrations/python-sdk/commit/ac996ebde3816be7fcef375087d13d62d85374f0)) +* **docs:** updating documented docs for mintlify ([#5](https://github.com/openintegrations/python-sdk/issues/5)) ([80624c2](https://github.com/openintegrations/python-sdk/commit/80624c2bfe3e06d971af96da9a629123b7920290)) + ## 0.1.0-alpha.1 (2025-03-04) Full Changelog: [v0.0.1-alpha.0...v0.1.0-alpha.1](https://github.com/openintegrations/python-sdk/compare/v0.0.1-alpha.0...v0.1.0-alpha.1) diff --git a/pyproject.toml b/pyproject.toml index b8d0077..107d19a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openint" -version = "0.1.0-alpha.1" +version = "0.1.0-alpha.2" description = "The official Python library for the Openint API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/openint/_version.py b/src/openint/_version.py index 3ce24e1..5f81e4c 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__ = "0.1.0-alpha.1" # x-release-please-version +__version__ = "0.1.0-alpha.2" # x-release-please-version