From 0e91602e91f302fc1da397833d7ebe3207916960 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Fri, 26 Apr 2024 13:53:49 +0000 Subject: [PATCH] ci: regenerated with OpenAPI Doc 3.0.0, Speakeasy CLI 1.274.1 --- platform/.speakeasy/gen.lock | 46 +- platform/README.md | 22 +- platform/RELEASES.md | 12 +- platform/USAGE.md | 1 + .../getcompanydatastatusresponse.md | 2 +- ...tconnectionmanagementaccesstokenrequest.md | 8 + ...connectionmanagementaccesstokenresponse.md | 11 + ...onnectionmanagementcorssettingsresponse.md | 11 + ...onnectionmanagementcorssettingsresponse.md | 11 + .../shared/clientratelimitreachedwebhook.md | 18 +- .../shared/clientratelimitresetwebhook.md | 18 +- .../shared/connectionmanagementaccesstoken.md | 8 + .../connectionmanagementallowedorigins.md | 8 + .../shared/connectionstatuschangedwebhook.md | 22 +- .../shared/datasetdatachangedwebhook.md | 22 +- platform/docs/models/shared/datasetstatus.md | 30 + .../datasetstatuschangederrorwebhook.md | 22 +- platform/docs/models/shared/datastatus.md | 2 +- platform/docs/models/shared/datastatuses.md | 50 ++ .../models/shared/datasynccompletedwebhook.md | 22 +- .../shared/newcompanysynchronizedwebhook.md | 22 +- platform/docs/models/shared/pulloperation.md | 2 +- .../pushoperationstatuschangedwebhook.md | 22 +- .../shared/pushoperationtimedoutwebhook.md | 22 +- platform/docs/models/shared/status.md | 4 +- .../docs/models/shared/webhookconsumer.md | 13 +- .../models/shared/webhookconsumerprototype.md | 11 +- platform/docs/sdks/codatplatform/README.md | 23 +- platform/docs/sdks/companies/README.md | 19 +- .../docs/sdks/connectionmanagement/README.md | 58 ++ platform/docs/sdks/connections/README.md | 22 +- platform/docs/sdks/corssettings/README.md | 105 +++ platform/docs/sdks/customdatatype/README.md | 14 +- platform/docs/sdks/groups/README.md | 16 +- platform/docs/sdks/integrations/README.md | 11 +- platform/docs/sdks/pushdata/README.md | 11 +- platform/docs/sdks/refreshdata/README.md | 19 +- platform/docs/sdks/settings/README.md | 25 +- platform/docs/sdks/supplementaldata/README.md | 10 +- platform/docs/sdks/webhooks/README.md | 26 +- platform/gen.yaml | 4 +- platform/py.typed | 1 + platform/pylintrc | 3 +- platform/setup.py | 32 +- platform/src/codatplatform/_hooks/sdkhooks.py | 27 +- platform/src/codatplatform/_hooks/types.py | 14 +- platform/src/codatplatform/companies.py | 250 ++++--- .../codatplatform/connection_management.py | 107 +++ platform/src/codatplatform/connections.py | 306 ++++---- platform/src/codatplatform/cors_settings.py | 190 +++++ .../src/codatplatform/custom_data_type.py | 205 ++--- platform/src/codatplatform/groups.py | 200 ++--- platform/src/codatplatform/integrations.py | 151 ++-- .../models/operations/__init__.py | 5 +- .../operations/get_company_data_status.py | 6 +- .../get_connection_management_access_token.py | 29 + ...get_connection_management_cors_settings.py | 21 + ...set_connection_management_cors_settings.py | 21 + .../codatplatform/models/shared/__init__.py | 6 +- .../shared/clientratelimitreachedwebhook.py | 5 +- .../shared/clientratelimitresetwebhook.py | 5 +- .../shared/connectionmanagementaccesstoken.py | 16 + .../connectionmanagementallowedorigins.py | 16 + .../shared/connectionstatuschangedwebhook.py | 5 +- .../shared/datasetdatachangedwebhook.py | 5 +- .../datasetstatuschangederrorwebhook.py | 5 +- .../codatplatform/models/shared/datastatus.py | 5 +- .../models/shared/datastatuses.py | 101 +++ .../models/shared/datasynccompletedwebhook.py | 5 +- .../shared/newcompanysynchronizedwebhook.py | 5 +- .../models/shared/pulloperation.py | 10 +- .../pushoperationstatuschangedwebhook.py | 5 +- .../shared/pushoperationtimedoutwebhook.py | 5 +- .../src/codatplatform/models/shared/status.py | 28 + .../models/shared/webhookconsumer.py | 2 + .../models/shared/webhookconsumerprototype.py | 2 + platform/src/codatplatform/push_data.py | 153 ++-- platform/src/codatplatform/refresh_data.py | 252 ++++--- platform/src/codatplatform/sdk.py | 81 +- .../src/codatplatform/sdkconfiguration.py | 20 +- platform/src/codatplatform/settings.py | 340 +++++---- .../src/codatplatform/supplemental_data.py | 104 +-- platform/src/codatplatform/utils/retries.py | 7 +- platform/src/codatplatform/utils/utils.py | 701 +++++++++++------- platform/src/codatplatform/webhooks.py | 294 ++++---- 85 files changed, 2913 insertions(+), 1643 deletions(-) create mode 100644 platform/docs/models/operations/getconnectionmanagementaccesstokenrequest.md create mode 100644 platform/docs/models/operations/getconnectionmanagementaccesstokenresponse.md create mode 100644 platform/docs/models/operations/getconnectionmanagementcorssettingsresponse.md create mode 100644 platform/docs/models/operations/setconnectionmanagementcorssettingsresponse.md create mode 100644 platform/docs/models/shared/connectionmanagementaccesstoken.md create mode 100644 platform/docs/models/shared/connectionmanagementallowedorigins.md create mode 100644 platform/docs/models/shared/datasetstatus.md create mode 100644 platform/docs/models/shared/datastatuses.md create mode 100644 platform/docs/sdks/connectionmanagement/README.md create mode 100644 platform/docs/sdks/corssettings/README.md create mode 100644 platform/py.typed create mode 100644 platform/src/codatplatform/connection_management.py create mode 100644 platform/src/codatplatform/cors_settings.py create mode 100644 platform/src/codatplatform/models/operations/get_connection_management_access_token.py create mode 100644 platform/src/codatplatform/models/operations/get_connection_management_cors_settings.py create mode 100644 platform/src/codatplatform/models/operations/set_connection_management_cors_settings.py create mode 100644 platform/src/codatplatform/models/shared/connectionmanagementaccesstoken.py create mode 100644 platform/src/codatplatform/models/shared/connectionmanagementallowedorigins.py create mode 100644 platform/src/codatplatform/models/shared/datastatuses.py create mode 100644 platform/src/codatplatform/models/shared/status.py diff --git a/platform/.speakeasy/gen.lock b/platform/.speakeasy/gen.lock index b37d16655..1f082077e 100755 --- a/platform/.speakeasy/gen.lock +++ b/platform/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: ede4f28e-23c0-442d-89ba-baa76ae2da6e management: - docChecksum: 6b9afa35a1ca4d8a1834643e80dd9a19 + docChecksum: 91b86a7707fc536ccbdc7b7345d775a0 docVersion: 3.0.0 - speakeasyVersion: internal - generationVersion: 2.277.0 - releaseVersion: 3.4.0 - configChecksum: 29197c333cff36b846fe087471e16d21 + speakeasyVersion: 1.274.1 + generationVersion: 2.314.0 + releaseVersion: 3.5.0 + configChecksum: 80bf5d1b7da8b1a6ec5440792d84c83d repoURL: https://github.com/codatio/client-sdk-python.git repoSubDirectory: platform installationURL: https://github.com/codatio/client-sdk-python.git#subdirectory=platform @@ -14,19 +14,24 @@ management: features: python: constsAndDefaults: 0.1.3 - core: 4.5.0 + core: 4.6.5 deprecations: 2.81.1 examples: 2.81.3 - globalSecurity: 2.83.4 - globalServerURLs: 2.82.1 + globalSecurity: 2.83.5 + globalServerURLs: 2.82.2 + groups: 2.81.2 + ignores: 2.81.1 inputOutputModels: 2.83.1 - nameOverrides: 2.81.1 - retries: 2.82.1 + nameOverrides: 2.81.2 + responseFormat: 0.1.0 + retries: 2.82.2 webhooks: 1.0.0 generatedFiles: - src/codatplatform/sdkconfiguration.py - src/codatplatform/settings.py - src/codatplatform/companies.py + - src/codatplatform/cors_settings.py + - src/codatplatform/connection_management.py - src/codatplatform/connections.py - src/codatplatform/custom_data_type.py - src/codatplatform/push_data.py @@ -36,6 +41,7 @@ generatedFiles: - src/codatplatform/supplemental_data.py - src/codatplatform/webhooks.py - src/codatplatform/sdk.py + - py.typed - pylintrc - setup.py - src/codatplatform/__init__.py @@ -56,6 +62,9 @@ generatedFiles: - src/codatplatform/models/operations/get_company.py - src/codatplatform/models/operations/list_companies.py - src/codatplatform/models/operations/update_company.py + - src/codatplatform/models/operations/get_connection_management_access_token.py + - src/codatplatform/models/operations/get_connection_management_cors_settings.py + - src/codatplatform/models/operations/set_connection_management_cors_settings.py - src/codatplatform/models/operations/create_connection.py - src/codatplatform/models/operations/delete_connection.py - src/codatplatform/models/operations/get_connection.py @@ -108,6 +117,8 @@ generatedFiles: - src/codatplatform/models/shared/companies.py - src/codatplatform/models/shared/links.py - src/codatplatform/models/shared/halref.py + - src/codatplatform/models/shared/connectionmanagementaccesstoken.py + - src/codatplatform/models/shared/connectionmanagementallowedorigins.py - src/codatplatform/models/shared/connections.py - src/codatplatform/models/shared/updateconnectionstatus.py - src/codatplatform/models/shared/customdatatypeconfiguration.py @@ -129,7 +140,9 @@ generatedFiles: - src/codatplatform/models/shared/pushchangetype.py - src/codatplatform/models/shared/pushoperationref.py - src/codatplatform/models/shared/pushoperations.py + - src/codatplatform/models/shared/datastatuses.py - src/codatplatform/models/shared/datastatus.py + - src/codatplatform/models/shared/status.py - src/codatplatform/models/shared/pulloperations.py - src/codatplatform/models/shared/companygroupassignment.py - src/codatplatform/models/shared/group.py @@ -205,6 +218,10 @@ generatedFiles: - docs/models/operations/listcompaniesresponse.md - docs/models/operations/updatecompanyrequest.md - docs/models/operations/updatecompanyresponse.md + - docs/models/operations/getconnectionmanagementaccesstokenrequest.md + - docs/models/operations/getconnectionmanagementaccesstokenresponse.md + - docs/models/operations/getconnectionmanagementcorssettingsresponse.md + - docs/models/operations/setconnectionmanagementcorssettingsresponse.md - docs/models/operations/createconnectionrequestbody.md - docs/models/operations/createconnectionrequest.md - docs/models/operations/createconnectionresponse.md @@ -288,6 +305,8 @@ generatedFiles: - docs/models/shared/companies.md - docs/models/shared/links.md - docs/models/shared/halref.md + - docs/models/shared/connectionmanagementaccesstoken.md + - docs/models/shared/connectionmanagementallowedorigins.md - docs/models/shared/connections.md - docs/models/shared/updateconnectionstatus.md - docs/models/shared/customdatatypeconfiguration.md @@ -295,7 +314,7 @@ generatedFiles: - docs/models/shared/content.md - docs/models/shared/modifieddate.md - docs/models/shared/customdatatyperecord.md - - docs/models/shared/status.md + - docs/models/shared/datasetstatus.md - docs/models/shared/pulloperation.md - docs/models/shared/pushoption.md - docs/models/shared/pushvalidationinfo.md @@ -312,8 +331,10 @@ generatedFiles: - docs/models/shared/pushchangetype.md - docs/models/shared/pushoperationref.md - docs/models/shared/pushoperations.md + - docs/models/shared/datastatuses.md - docs/models/shared/datatypes.md - docs/models/shared/datastatus.md + - docs/models/shared/status.md - docs/models/shared/pulloperations.md - docs/models/shared/companygroupassignment.md - docs/models/shared/group.md @@ -372,6 +393,8 @@ generatedFiles: - docs/models/utils/retryconfig.md - docs/sdks/settings/README.md - docs/sdks/companies/README.md + - docs/sdks/connectionmanagement/README.md + - docs/sdks/corssettings/README.md - docs/sdks/connections/README.md - docs/sdks/customdatatype/README.md - docs/sdks/pushdata/README.md @@ -382,7 +405,6 @@ generatedFiles: - docs/sdks/webhooks/README.md - USAGE.md - .gitattributes - - src/codatplatform/_hooks/registration.py - src/codatplatform/_hooks/sdkhooks.py - src/codatplatform/_hooks/types.py - src/codatplatform/_hooks/__init__.py diff --git a/platform/README.md b/platform/README.md index 0cbebb602..507674b54 100644 --- a/platform/README.md +++ b/platform/README.md @@ -37,6 +37,7 @@ res = s.settings.create_api_key(req) if res.api_key_details is not None: # handle response pass + ``` @@ -61,6 +62,15 @@ if res.api_key_details is not None: * [list](docs/sdks/companies/README.md#list) - List companies * [update](docs/sdks/companies/README.md#update) - Update company +### [connection_management](docs/sdks/connectionmanagement/README.md) + +* [get_access_token](docs/sdks/connectionmanagement/README.md#get_access_token) - Get access token + +### [connection_management.cors_settings](docs/sdks/corssettings/README.md) + +* [get](docs/sdks/corssettings/README.md#get) - Get CORS settings +* [set](docs/sdks/corssettings/README.md#set) - Set CORS settings + ### [connections](docs/sdks/connections/README.md) * [create](docs/sdks/connections/README.md#create) - Create connection @@ -148,6 +158,7 @@ res = s.settings.create_api_key(req, if res.api_key_details is not None: # handle response pass + ``` If you'd like to override the default retry strategy for all operations that support retries, you can use the `retry_config` optional parameter when initializing the SDK: @@ -157,7 +168,7 @@ from codatplatform.models import shared from codatplatform.utils import BackoffStrategy, RetryConfig s = codatplatform.CodatPlatform( - retry_config=RetryConfig('backoff', BackoffStrategy(1, 50, 1.1, 100), False) + retry_config=RetryConfig('backoff', BackoffStrategy(1, 50, 1.1, 100), False), security=shared.Security( auth_header="Basic BASE_64_ENCODED(API_KEY)", ), @@ -172,6 +183,7 @@ res = s.settings.create_api_key(req) if res.api_key_details is not None: # handle response pass + ``` @@ -183,7 +195,7 @@ Handling errors in this SDK should largely match your expectations. All operati | Error Object | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.ErrorMessage | 400,401,402,403,409,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ### Example @@ -214,6 +226,7 @@ except errors.SDKError as e: if res.api_key_details is not None: # handle response pass + ``` @@ -250,6 +263,7 @@ res = s.settings.create_api_key(req) if res.api_key_details is not None: # handle response pass + ``` @@ -276,6 +290,7 @@ res = s.settings.create_api_key(req) if res.api_key_details is not None: # handle response pass + ``` @@ -291,7 +306,7 @@ import requests http_client = requests.Session() http_client.headers.update({'x-custom-header': 'someValue'}) -s = codatplatform.CodatPlatform(client: http_client) +s = codatplatform.CodatPlatform(client=http_client) ``` @@ -326,6 +341,7 @@ res = s.settings.create_api_key(req) if res.api_key_details is not None: # handle response pass + ``` diff --git a/platform/RELEASES.md b/platform/RELEASES.md index 983784d6f..c1084ffc6 100644 --- a/platform/RELEASES.md +++ b/platform/RELEASES.md @@ -88,4 +88,14 @@ Based on: ### Generated - [python v3.4.0] platform ### Releases -- [PyPI v3.4.0] https://pypi.org/project/codat-platform/3.4.0 - platform \ No newline at end of file +- [PyPI v3.4.0] https://pypi.org/project/codat-platform/3.4.0 - platform + +## 2024-04-26 13:53:28 +### Changes +Based on: +- OpenAPI Doc 3.0.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Platform.yaml +- Speakeasy CLI 1.274.1 (2.314.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v3.5.0] platform +### Releases +- [PyPI v3.5.0] https://pypi.org/project/codat-platform/3.5.0 - platform \ No newline at end of file diff --git a/platform/USAGE.md b/platform/USAGE.md index bd52f7bb6..7f3254461 100644 --- a/platform/USAGE.md +++ b/platform/USAGE.md @@ -18,5 +18,6 @@ res = s.settings.create_api_key(req) if res.api_key_details is not None: # handle response pass + ``` \ No newline at end of file diff --git a/platform/docs/models/operations/getcompanydatastatusresponse.md b/platform/docs/models/operations/getcompanydatastatusresponse.md index 0d9e4b287..059f2033d 100644 --- a/platform/docs/models/operations/getcompanydatastatusresponse.md +++ b/platform/docs/models/operations/getcompanydatastatusresponse.md @@ -8,4 +8,4 @@ | `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | | `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | | `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `data_statuses` | Dict[str, [shared.DataStatus](../../models/shared/datastatus.md)] | :heavy_minus_sign: | OK | \ No newline at end of file +| `data_statuses` | [Optional[shared.DataStatuses]](../../models/shared/datastatuses.md) | :heavy_minus_sign: | OK | \ No newline at end of file diff --git a/platform/docs/models/operations/getconnectionmanagementaccesstokenrequest.md b/platform/docs/models/operations/getconnectionmanagementaccesstokenrequest.md new file mode 100644 index 000000000..cd8b86c59 --- /dev/null +++ b/platform/docs/models/operations/getconnectionmanagementaccesstokenrequest.md @@ -0,0 +1,8 @@ +# GetConnectionManagementAccessTokenRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | Unique identifier for a company. | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/platform/docs/models/operations/getconnectionmanagementaccesstokenresponse.md b/platform/docs/models/operations/getconnectionmanagementaccesstokenresponse.md new file mode 100644 index 000000000..0a2e41242 --- /dev/null +++ b/platform/docs/models/operations/getconnectionmanagementaccesstokenresponse.md @@ -0,0 +1,11 @@ +# GetConnectionManagementAccessTokenResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `connection_management_access_token` | [Optional[shared.ConnectionManagementAccessToken]](../../models/shared/connectionmanagementaccesstoken.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/platform/docs/models/operations/getconnectionmanagementcorssettingsresponse.md b/platform/docs/models/operations/getconnectionmanagementcorssettingsresponse.md new file mode 100644 index 000000000..e43c12266 --- /dev/null +++ b/platform/docs/models/operations/getconnectionmanagementcorssettingsresponse.md @@ -0,0 +1,11 @@ +# GetConnectionManagementCorsSettingsResponse + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | +| `connection_management_allowed_origins` | [Optional[shared.ConnectionManagementAllowedOrigins]](../../models/shared/connectionmanagementallowedorigins.md) | :heavy_minus_sign: | Success | {
"allowedOrigins": [
"https://www.bank-of-dave.com"
]
} | \ No newline at end of file diff --git a/platform/docs/models/operations/setconnectionmanagementcorssettingsresponse.md b/platform/docs/models/operations/setconnectionmanagementcorssettingsresponse.md new file mode 100644 index 000000000..83f381967 --- /dev/null +++ b/platform/docs/models/operations/setconnectionmanagementcorssettingsresponse.md @@ -0,0 +1,11 @@ +# SetConnectionManagementCorsSettingsResponse + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | +| `connection_management_allowed_origins` | [Optional[shared.ConnectionManagementAllowedOrigins]](../../models/shared/connectionmanagementallowedorigins.md) | :heavy_minus_sign: | Success | {
"allowedOrigins": [
"https://www.bank-of-dave.com"
]
} | \ No newline at end of file diff --git a/platform/docs/models/shared/clientratelimitreachedwebhook.md b/platform/docs/models/shared/clientratelimitreachedwebhook.md index 0f45dde24..7e8db4c18 100644 --- a/platform/docs/models/shared/clientratelimitreachedwebhook.md +++ b/platform/docs/models/shared/clientratelimitreachedwebhook.md @@ -5,12 +5,12 @@ Webhook request body for a client that has reached their rate limit. ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | -| `data` | [Optional[shared.ClientRateLimitReachedWebhookData]](../../models/shared/clientratelimitreachedwebhookdata.md) | :heavy_minus_sign: | N/A | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | +| `data` | [Optional[shared.ClientRateLimitReachedWebhookData]](../../models/shared/clientratelimitreachedwebhookdata.md) | :heavy_minus_sign: | N/A | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | \ No newline at end of file diff --git a/platform/docs/models/shared/clientratelimitresetwebhook.md b/platform/docs/models/shared/clientratelimitresetwebhook.md index a589302d2..4b69731e8 100644 --- a/platform/docs/models/shared/clientratelimitresetwebhook.md +++ b/platform/docs/models/shared/clientratelimitresetwebhook.md @@ -5,12 +5,12 @@ Webhook request body for a client that has had their rate limit reset. ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | -| `data` | [Optional[shared.ClientRateLimitResetWebhookData]](../../models/shared/clientratelimitresetwebhookdata.md) | :heavy_minus_sign: | N/A | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | +| `data` | [Optional[shared.ClientRateLimitResetWebhookData]](../../models/shared/clientratelimitresetwebhookdata.md) | :heavy_minus_sign: | N/A | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | \ No newline at end of file diff --git a/platform/docs/models/shared/connectionmanagementaccesstoken.md b/platform/docs/models/shared/connectionmanagementaccesstoken.md new file mode 100644 index 000000000..a6fa3b809 --- /dev/null +++ b/platform/docs/models/shared/connectionmanagementaccesstoken.md @@ -0,0 +1,8 @@ +# ConnectionManagementAccessToken + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `access_token` | *Optional[str]* | :heavy_minus_sign: | Access token that allows SMBs to manage connections that have access to their data. | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c | \ No newline at end of file diff --git a/platform/docs/models/shared/connectionmanagementallowedorigins.md b/platform/docs/models/shared/connectionmanagementallowedorigins.md new file mode 100644 index 000000000..4a52b9a47 --- /dev/null +++ b/platform/docs/models/shared/connectionmanagementallowedorigins.md @@ -0,0 +1,8 @@ +# ConnectionManagementAllowedOrigins + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `allowed_origins` | List[*str*] | :heavy_minus_sign: | An array of allowed origins (i.e. your domains) to permit cross-origin resource sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)).n resource sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)). | \ No newline at end of file diff --git a/platform/docs/models/shared/connectionstatuschangedwebhook.md b/platform/docs/models/shared/connectionstatuschangedwebhook.md index 42733486e..bb798cedd 100644 --- a/platform/docs/models/shared/connectionstatuschangedwebhook.md +++ b/platform/docs/models/shared/connectionstatuschangedwebhook.md @@ -5,14 +5,14 @@ Webhook request body for a company's data connection status changed. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | -| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `data` | [Optional[shared.ConnectionStatusChangedWebhookData]](../../models/shared/connectionstatuschangedwebhookdata.md) | :heavy_minus_sign: | N/A | | -| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[shared.ConnectionStatusChangedWebhookData]](../../models/shared/connectionstatuschangedwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/platform/docs/models/shared/datasetdatachangedwebhook.md b/platform/docs/models/shared/datasetdatachangedwebhook.md index ea26e865b..a50b8cf0c 100644 --- a/platform/docs/models/shared/datasetdatachangedwebhook.md +++ b/platform/docs/models/shared/datasetdatachangedwebhook.md @@ -5,14 +5,14 @@ Webhook request body to notify that a data synchronization has completed. ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | -| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `data` | [Optional[shared.DatasetDataChangedWebhookData]](../../models/shared/datasetdatachangedwebhookdata.md) | :heavy_minus_sign: | N/A | | -| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[shared.DatasetDataChangedWebhookData]](../../models/shared/datasetdatachangedwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/platform/docs/models/shared/datasetstatus.md b/platform/docs/models/shared/datasetstatus.md new file mode 100644 index 000000000..42a224341 --- /dev/null +++ b/platform/docs/models/shared/datasetstatus.md @@ -0,0 +1,30 @@ +# DatasetStatus + +The current status of the dataset. + + +## Values + +| Name | Value | +| ---------------------- | ---------------------- | +| `INITIAL` | Initial | +| `QUEUED` | Queued | +| `FETCHING` | Fetching | +| `MAP_QUEUED` | MapQueued | +| `MAPPING` | Mapping | +| `COMPLETE` | Complete | +| `FETCH_ERROR` | FetchError | +| `MAP_ERROR` | MapError | +| `INTERNAL_ERROR` | InternalError | +| `PROCESSING_QUEUED` | ProcessingQueued | +| `PROCESSING` | Processing | +| `PROCESSING_ERROR` | ProcessingError | +| `VALIDATION_QUEUED` | ValidationQueued | +| `VALIDATING` | Validating | +| `VALIDATION_ERROR` | ValidationError | +| `AUTH_ERROR` | AuthError | +| `CANCELLED` | Cancelled | +| `NOT_SUPPORTED` | NotSupported | +| `RATE_LIMIT_ERROR` | RateLimitError | +| `PERMISSIONS_ERROR` | PermissionsError | +| `PREREQUISITE_NOT_MET` | PrerequisiteNotMet | \ No newline at end of file diff --git a/platform/docs/models/shared/datasetstatuschangederrorwebhook.md b/platform/docs/models/shared/datasetstatuschangederrorwebhook.md index 78fd9cd4c..aabe81da3 100644 --- a/platform/docs/models/shared/datasetstatuschangederrorwebhook.md +++ b/platform/docs/models/shared/datasetstatuschangederrorwebhook.md @@ -5,14 +5,14 @@ Webhook request body to notify that a data synchronization has completed. ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | -| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `data` | [Optional[shared.DatasetStatusChangedErrorWebhookData]](../../models/shared/datasetstatuschangederrorwebhookdata.md) | :heavy_minus_sign: | N/A | | -| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[shared.DatasetStatusChangedErrorWebhookData]](../../models/shared/datasetstatuschangederrorwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/platform/docs/models/shared/datastatus.md b/platform/docs/models/shared/datastatus.md index 6d6e94948..07be889e4 100644 --- a/platform/docs/models/shared/datastatus.md +++ b/platform/docs/models/shared/datastatus.md @@ -7,7 +7,7 @@ Describes the state of data in the Codat cache for a company and data type | Field | Type | Required | Description | Example | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `current_status` | *str* | :heavy_check_mark: | The current status of the dataset in Codat's cache. | | +| `current_status` | [shared.Status](../../models/shared/status.md) | :heavy_check_mark: | The current status of the dataset. | | | `data_type` | [shared.DataTypes](../../models/shared/datatypes.md) | :heavy_check_mark: | Available data types | invoices | | `last_successful_sync` | *str* | :heavy_check_mark: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23 00:00:00 +0000 UTC | | `latest_successful_sync_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the most recent successful sync of data type. | 8220fc90-55b6-47bc-9417-48ac6ea93101 | diff --git a/platform/docs/models/shared/datastatuses.md b/platform/docs/models/shared/datastatuses.md new file mode 100644 index 000000000..935457bb3 --- /dev/null +++ b/platform/docs/models/shared/datastatuses.md @@ -0,0 +1,50 @@ +# DataStatuses + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `account_transactions` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `balance_sheet` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `bank_accounts` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `bank_transactions` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `banking_account_balances` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `banking_accounts` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `banking_transaction_categories` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `banking_transactions` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `bill_credit_notes` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `bill_payments` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `bills` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `cash_flow_statement` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `chart_of_accounts` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_company_info` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_customers` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_disputes` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_locations` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_orders` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_payment_methods` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_payments` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_product_categories` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_products` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_tax_components` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `commerce_transactions` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `company` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `credit_notes` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `customers` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `direct_costs` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `direct_incomes` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `invoices` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `item_receipts` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `items` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `journal_entries` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `journals` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `payment_methods` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `payments` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `profit_and_loss` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `purchase_orders` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `sales_orders` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `suppliers` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `tax_rates` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `tracking_categories` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | +| `transfers` | [Optional[shared.DataStatus]](../../models/shared/datastatus.md) | :heavy_minus_sign: | Describes the state of data in the Codat cache for a company and data type | {
"dataType": "string",
"lastSuccessfulSync": "2022-01-01T13:00:00.000Z",
"currentStatus": "string",
"latestSyncId": "ad474a37-2003-478e-baee-9af9f1ec2fe3",
"latestSuccessfulSyncId": "8220fc90-55b6-47bc-9417-48ac6ea93101"
} | \ No newline at end of file diff --git a/platform/docs/models/shared/datasynccompletedwebhook.md b/platform/docs/models/shared/datasynccompletedwebhook.md index f29d68d8e..81d6daca9 100644 --- a/platform/docs/models/shared/datasynccompletedwebhook.md +++ b/platform/docs/models/shared/datasynccompletedwebhook.md @@ -5,14 +5,14 @@ Webhook request body to notify the completion of a data sync. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | -| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `data` | [Optional[shared.DataSyncCompletedWebhookData]](../../models/shared/datasynccompletedwebhookdata.md) | :heavy_minus_sign: | N/A | | -| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[shared.DataSyncCompletedWebhookData]](../../models/shared/datasynccompletedwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/platform/docs/models/shared/newcompanysynchronizedwebhook.md b/platform/docs/models/shared/newcompanysynchronizedwebhook.md index 3c738f624..71906a50e 100644 --- a/platform/docs/models/shared/newcompanysynchronizedwebhook.md +++ b/platform/docs/models/shared/newcompanysynchronizedwebhook.md @@ -5,14 +5,14 @@ Webhook request body to notify that a new company has successfully synchronized ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | -| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `data` | [Optional[shared.NewCompanySynchronizedWebhookData]](../../models/shared/newcompanysynchronizedwebhookdata.md) | :heavy_minus_sign: | N/A | | -| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[shared.NewCompanySynchronizedWebhookData]](../../models/shared/newcompanysynchronizedwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/platform/docs/models/shared/pulloperation.md b/platform/docs/models/shared/pulloperation.md index 8bcdf5d2b..58b2d0a8d 100644 --- a/platform/docs/models/shared/pulloperation.md +++ b/platform/docs/models/shared/pulloperation.md @@ -16,7 +16,7 @@ Information about a queued, in progress or completed pull operation. | `is_errored` | *bool* | :heavy_check_mark: | `True` if the pull operation entered an error state. | | | `progress` | *int* | :heavy_check_mark: | An integer signifying the progress of the pull operation. | | | `requested` | *str* | :heavy_check_mark: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23 00:00:00 +0000 UTC | -| `status` | [shared.Status](../../models/shared/status.md) | :heavy_check_mark: | The current status of the pull operation. | Complete | +| `status` | [shared.DatasetStatus](../../models/shared/datasetstatus.md) | :heavy_check_mark: | The current status of the dataset. | | | `completed` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23 00:00:00 +0000 UTC | | `error_message` | *Optional[str]* | :heavy_minus_sign: | A message about a transient or persistent error. | | | `status_description` | *Optional[str]* | :heavy_minus_sign: | Additional information about the dataset status. | Paused until 2022-10-23T00:00:00.000Z | \ No newline at end of file diff --git a/platform/docs/models/shared/pushoperationstatuschangedwebhook.md b/platform/docs/models/shared/pushoperationstatuschangedwebhook.md index 490171d11..cb6c4b750 100644 --- a/platform/docs/models/shared/pushoperationstatuschangedwebhook.md +++ b/platform/docs/models/shared/pushoperationstatuschangedwebhook.md @@ -5,14 +5,14 @@ Webhook request body for a push operation status change. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | -| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `data` | [Optional[shared.PushOperationStatusChangedWebhookData]](../../models/shared/pushoperationstatuschangedwebhookdata.md) | :heavy_minus_sign: | N/A | | -| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[shared.PushOperationStatusChangedWebhookData]](../../models/shared/pushoperationstatuschangedwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/platform/docs/models/shared/pushoperationtimedoutwebhook.md b/platform/docs/models/shared/pushoperationtimedoutwebhook.md index fd4a9c891..e2a301872 100644 --- a/platform/docs/models/shared/pushoperationtimedoutwebhook.md +++ b/platform/docs/models/shared/pushoperationtimedoutwebhook.md @@ -5,14 +5,14 @@ Webhook request body notifying that a push push operation has timed out. ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | -| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | -| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | -| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `data` | [Optional[shared.PushOperationTimedOutWebhookData]](../../models/shared/pushoperationtimedoutwebhookdata.md) | :heavy_minus_sign: | N/A | | -| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | -| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | -| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | -| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[shared.PushOperationTimedOutWebhookData]](../../models/shared/pushoperationtimedoutwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `data_connection_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human-readable message about the webhook. | | +| ~~`rule_id`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/platform/docs/models/shared/status.md b/platform/docs/models/shared/status.md index 564fc4f24..2fb340539 100644 --- a/platform/docs/models/shared/status.md +++ b/platform/docs/models/shared/status.md @@ -1,6 +1,6 @@ # Status -The current status of the pull operation. +The current status of the dataset. ## Values @@ -24,8 +24,6 @@ The current status of the pull operation. | `VALIDATION_ERROR` | ValidationError | | `AUTH_ERROR` | AuthError | | `CANCELLED` | Cancelled | -| `ROUTING` | Routing | -| `ROUTING_ERROR` | RoutingError | | `NOT_SUPPORTED` | NotSupported | | `RATE_LIMIT_ERROR` | RateLimitError | | `PERMISSIONS_ERROR` | PermissionsError | diff --git a/platform/docs/models/shared/webhookconsumer.md b/platform/docs/models/shared/webhookconsumer.md index a449de275..339aa760d 100644 --- a/platform/docs/models/shared/webhookconsumer.md +++ b/platform/docs/models/shared/webhookconsumer.md @@ -8,9 +8,10 @@ See our documentation for more details on [Codat's webhook service](https://docs ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Flag that enables or disables the endpoint from receiving events. Disabled when set to `true`. | | -| `event_types` | List[*str*] | :heavy_minus_sign: | An array of event types the webhook consumer subscribes to. | | -| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the webhook consumer. | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `url` | *Optional[str]* | :heavy_minus_sign: | The URL that will consume webhook events dispatched by Codat. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the company to indicate company-specific events. The associated webhook consumer will receive events only for the specified ID. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Flag that enables or disables the endpoint from receiving events. Disabled when set to `true`. | | +| `event_types` | List[*str*] | :heavy_minus_sign: | An array of event types the webhook consumer subscribes to. | | +| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the webhook consumer. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `url` | *Optional[str]* | :heavy_minus_sign: | The URL that will consume webhook events dispatched by Codat. | | \ No newline at end of file diff --git a/platform/docs/models/shared/webhookconsumerprototype.md b/platform/docs/models/shared/webhookconsumerprototype.md index f4e0ccd59..ce5b889c2 100644 --- a/platform/docs/models/shared/webhookconsumerprototype.md +++ b/platform/docs/models/shared/webhookconsumerprototype.md @@ -3,8 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Flag that enables or disables the endpoint from receiving events. Disabled when set to `true`. | -| `event_types` | List[*str*] | :heavy_minus_sign: | An array of event types the webhook consumer subscribes to. | -| `url` | *Optional[str]* | :heavy_minus_sign: | The URL that will consume webhook events dispatched by Codat. | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the company to indicate company-specific events. The associated webhook consumer will receive events only for the specified ID. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Flag that enables or disables the endpoint from receiving events. Disabled when set to `true`. | | +| `event_types` | List[*str*] | :heavy_minus_sign: | An array of event types the webhook consumer subscribes to. | | +| `url` | *Optional[str]* | :heavy_minus_sign: | The URL that will consume webhook events dispatched by Codat. | | \ No newline at end of file diff --git a/platform/docs/sdks/codatplatform/README.md b/platform/docs/sdks/codatplatform/README.md index 49e391bb9..76b134a7b 100644 --- a/platform/docs/sdks/codatplatform/README.md +++ b/platform/docs/sdks/codatplatform/README.md @@ -7,9 +7,26 @@ An API for the common components of all of Codat's products. These end points cover creating and managing your companies, data connections, and integrations. -[Read about the building blocks of Codat...](https://docs.codat.io/core-concepts/companies) - -[See our OpenAPI spec](https://github.com/codatio/oas) +[Read about the building blocks of Codat...](https://docs.codat.io/core-concepts/companies) | [See our OpenAPI spec](https://github.com/codatio/oas) + +--- + +## Endpoints + +| Endpoints | Description | +| :- |:- | +| Companies | Create and manage your SMB users' companies. | +| Connections | Create new and manage existing data connections for a company. | +| Connection management | Configure connection management UI and retrieve access tokens for authentication. | +| Groups | Define and manage sets of companies based on a chosen characteristic. | +| Webhooks | Create and manage webhooks that listen to Codat's events. | +| Integrations | Get a list of integrations supported by Codat and their logos. | +| Refresh data | Initiate data refreshes, view pull status and history. | +| Settings | Manage company profile configuration, sync settings, and API keys. | +| Push data | Initiate and monitor Create, Update, and Delete operations. | +| Supplemental data | Configure and pull additional data you can include in Codat's standard data types. | +| Custom data type | Configure and pull additional data types that are not included in Codat's standardized data model. | + ### Available Operations diff --git a/platform/docs/sdks/companies/README.md b/platform/docs/sdks/companies/README.md index 1a003bb4b..ac621469b 100644 --- a/platform/docs/sdks/companies/README.md +++ b/platform/docs/sdks/companies/README.md @@ -3,7 +3,7 @@ ## Overview -Create and manage your Codat companies. +Create and manage your SMB users' companies. ### Available Operations @@ -44,6 +44,7 @@ res = s.companies.create(req) if res.company is not None: # handle response pass + ``` ### Parameters @@ -62,7 +63,7 @@ if res.company is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 400,401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## delete @@ -90,9 +91,10 @@ req = operations.DeleteCompanyRequest( res = s.companies.delete(req) -if res.status_code == 200: +if res is not None: # handle response pass + ``` ### Parameters @@ -111,7 +113,7 @@ if res.status_code == 200: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get @@ -142,6 +144,7 @@ res = s.companies.get(req) if res.company is not None: # handle response pass + ``` ### Parameters @@ -160,7 +163,7 @@ if res.company is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list @@ -192,6 +195,7 @@ res = s.companies.list(req) if res.companies is not None: # handle response pass + ``` ### Parameters @@ -210,7 +214,7 @@ if res.companies is not None: | Error Object | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.ErrorMessage | 400,401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## update @@ -241,6 +245,7 @@ res = s.companies.update(req) if res.company is not None: # handle response pass + ``` ### Parameters @@ -259,4 +264,4 @@ if res.company is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/connectionmanagement/README.md b/platform/docs/sdks/connectionmanagement/README.md new file mode 100644 index 000000000..0cca6b5bd --- /dev/null +++ b/platform/docs/sdks/connectionmanagement/README.md @@ -0,0 +1,58 @@ +# ConnectionManagement +(*connection_management*) + +## Overview + +Configure connection management UI and retrieve access tokens for authentication. + +### Available Operations + +* [get_access_token](#get_access_token) - Get access token + +## get_access_token + +Use the *Get access token* endpoint to retrieve a new access token for use by the [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management). + +The embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) lets your customers control access to their data by allowing them to manage their existing connections. + +### Example Usage + +```python +import codatplatform +from codatplatform.models import operations, shared + +s = codatplatform.CodatPlatform( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetConnectionManagementAccessTokenRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.connection_management.get_access_token(req) + +if res.connection_management_access_token is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `request` | [operations.GetConnectionManagementAccessTokenRequest](../../models/operations/getconnectionmanagementaccesstokenrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetConnectionManagementAccessTokenResponse](../../models/operations/getconnectionmanagementaccesstokenresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------- | --------------------------- | --------------------------- | +| errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/connections/README.md b/platform/docs/sdks/connections/README.md index 318a1f1a1..5994bd013 100644 --- a/platform/docs/sdks/connections/README.md +++ b/platform/docs/sdks/connections/README.md @@ -3,7 +3,7 @@ ## Overview -Manage your companies' data connections. +Create new and manage existing data connections for a company. ### Available Operations @@ -41,6 +41,7 @@ res = s.connections.create(req) if res.connection is not None: # handle response pass + ``` ### Parameters @@ -59,7 +60,7 @@ if res.connection is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## delete @@ -85,9 +86,10 @@ req = operations.DeleteConnectionRequest( res = s.connections.delete(req) -if res.status_code == 200: +if res is not None: # handle response pass + ``` ### Parameters @@ -106,7 +108,7 @@ if res.status_code == 200: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get @@ -134,6 +136,7 @@ res = s.connections.get(req) if res.connection is not None: # handle response pass + ``` ### Parameters @@ -152,7 +155,7 @@ if res.connection is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list @@ -182,6 +185,7 @@ res = s.connections.list(req) if res.connections is not None: # handle response pass + ``` ### Parameters @@ -200,7 +204,7 @@ if res.connections is not None: | Error Object | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.ErrorMessage | 400,401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## unlink @@ -228,6 +232,7 @@ res = s.connections.unlink(req) if res.connection is not None: # handle response pass + ``` ### Parameters @@ -246,7 +251,7 @@ if res.connection is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## update_authorization @@ -274,6 +279,7 @@ res = s.connections.update_authorization(req) if res.connection is not None: # handle response pass + ``` ### Parameters @@ -292,4 +298,4 @@ if res.connection is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/corssettings/README.md b/platform/docs/sdks/corssettings/README.md new file mode 100644 index 000000000..438a2f4a1 --- /dev/null +++ b/platform/docs/sdks/corssettings/README.md @@ -0,0 +1,105 @@ +# CorsSettings +(*connection_management.cors_settings*) + +### Available Operations + +* [get](#get) - Get CORS settings +* [set](#set) - Set CORS settings + +## get + +The *Get CORS settings* endpoint returns the allowed origins (i.e. your domains) you want to allow cross-origin resource sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)) with Codat. + +Enabling CORS with Codat is required by our embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) to access Codat's API endpoints. + +The embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) lets your customers control access to their data by allowing them to manage their existing connections. + +### Example Usage + +```python +import codatplatform +from codatplatform.models import shared + +s = codatplatform.CodatPlatform( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + + +res = s.connection_management.cors_settings.get() + +if res.connection_management_allowed_origins is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetConnectionManagementCorsSettingsResponse](../../models/operations/getconnectionmanagementcorssettingsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------- | --------------------------- | --------------------------- | +| errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## set + +The *Set CORS settings* endpoint allows you to register allowed origins (i.e. your domains) for use in cross-origin resource sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)). + +Enabling CORS with Codat is required by our embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) to access Codat's API endpoints. + +The embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) lets your customers control access to their data by allowing them to manage their existing connections. + +### Example Usage + +```python +import codatplatform +from codatplatform.models import shared + +s = codatplatform.CodatPlatform( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = shared.ConnectionManagementAllowedOrigins( + allowed_origins=[ + 'https://www.bank-of-dave.com', + ], +) + +res = s.connection_management.cors_settings.set(req) + +if res.connection_management_allowed_origins is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `request` | [shared.ConnectionManagementAllowedOrigins](../../models/shared/connectionmanagementallowedorigins.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.SetConnectionManagementCorsSettingsResponse](../../models/operations/setconnectionmanagementcorssettingsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------- | --------------------------- | --------------------------- | +| errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/customdatatype/README.md b/platform/docs/sdks/customdatatype/README.md index ede8c01d4..64a2fb27c 100644 --- a/platform/docs/sdks/customdatatype/README.md +++ b/platform/docs/sdks/customdatatype/README.md @@ -3,7 +3,7 @@ ## Overview -View and configure custom data types for supported integrations. +Configure and pull additional data types that are not included in Codat's standardized data model. ### Available Operations @@ -66,6 +66,7 @@ res = s.custom_data_type.configure(req) if res.custom_data_type_configuration is not None: # handle response pass + ``` ### Parameters @@ -84,7 +85,7 @@ if res.custom_data_type_configuration is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get_configuration @@ -114,6 +115,7 @@ res = s.custom_data_type.get_configuration(req) if res.custom_data_type_records is not None: # handle response pass + ``` ### Parameters @@ -132,7 +134,7 @@ if res.custom_data_type_records is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list @@ -165,6 +167,7 @@ res = s.custom_data_type.list(req) if res.custom_data_type_records is not None: # handle response pass + ``` ### Parameters @@ -183,7 +186,7 @@ if res.custom_data_type_records is not None: | Error Object | Status Code | Content Type | | ----------------------------------- | ----------------------------------- | ----------------------------------- | | errors.ErrorMessage | 400,401,402,403,404,429,451,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## refresh @@ -212,6 +215,7 @@ res = s.custom_data_type.refresh(req) if res.pull_operation is not None: # handle response pass + ``` ### Parameters @@ -230,4 +234,4 @@ if res.pull_operation is not None: | Error Object | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.ErrorMessage | 401,402,403,404,429,451,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/groups/README.md b/platform/docs/sdks/groups/README.md index fb3a630d9..aa0a8faaa 100644 --- a/platform/docs/sdks/groups/README.md +++ b/platform/docs/sdks/groups/README.md @@ -3,7 +3,7 @@ ## Overview -Create groups and link them to your Codat companies. +Define and manage sets of companies based on a chosen characteristic. ### Available Operations @@ -39,6 +39,7 @@ res = s.groups.add_company(req) if res.company is not None: # handle response pass + ``` ### Parameters @@ -57,7 +58,7 @@ if res.company is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## create @@ -91,6 +92,7 @@ res = s.groups.create(req) if res.group is not None: # handle response pass + ``` ### Parameters @@ -109,7 +111,7 @@ if res.group is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,409,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list @@ -135,6 +137,7 @@ res = s.groups.list() if res.groups is not None: # handle response pass + ``` ### Parameters @@ -152,7 +155,7 @@ if res.groups is not None: | Error Object | Status Code | Content Type | | ----------------------- | ----------------------- | ----------------------- | | errors.ErrorMessage | 401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## remove_company @@ -179,9 +182,10 @@ req = operations.RemoveCompanyFromGroupRequest( res = s.groups.remove_company(req) -if res.status_code == 200: +if res is not None: # handle response pass + ``` ### Parameters @@ -200,4 +204,4 @@ if res.status_code == 200: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/integrations/README.md b/platform/docs/sdks/integrations/README.md index d4c012012..3f82e12ce 100644 --- a/platform/docs/sdks/integrations/README.md +++ b/platform/docs/sdks/integrations/README.md @@ -3,7 +3,7 @@ ## Overview -View and manage your available integrations in Codat. +Get a list of integrations supported by Codat and their logos. ### Available Operations @@ -36,6 +36,7 @@ res = s.integrations.get(req) if res.integration is not None: # handle response pass + ``` ### Parameters @@ -54,7 +55,7 @@ if res.integration is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get_branding @@ -81,6 +82,7 @@ res = s.integrations.get_branding(req) if res.branding is not None: # handle response pass + ``` ### Parameters @@ -99,7 +101,7 @@ if res.branding is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list @@ -128,6 +130,7 @@ res = s.integrations.list(req) if res.integrations is not None: # handle response pass + ``` ### Parameters @@ -146,4 +149,4 @@ if res.integrations is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 400,401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/pushdata/README.md b/platform/docs/sdks/pushdata/README.md index 26df6ae2d..181bc0cf0 100644 --- a/platform/docs/sdks/pushdata/README.md +++ b/platform/docs/sdks/pushdata/README.md @@ -3,7 +3,7 @@ ## Overview -View push options and get push statuses. +Initiate and monitor Create, Update, and Delete operations. ### Available Operations @@ -47,6 +47,7 @@ res = s.push_data.get_model_options(req) if res.push_option is not None: # handle response pass + ``` ### Parameters @@ -65,7 +66,7 @@ if res.push_option is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get_operation @@ -93,6 +94,7 @@ res = s.push_data.get_operation(req) if res.push_operation is not None: # handle response pass + ``` ### Parameters @@ -111,7 +113,7 @@ if res.push_operation is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list_operations @@ -141,6 +143,7 @@ res = s.push_data.list_operations(req) if res.push_operations is not None: # handle response pass + ``` ### Parameters @@ -159,4 +162,4 @@ if res.push_operations is not None: | Error Object | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.ErrorMessage | 400,401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/refreshdata/README.md b/platform/docs/sdks/refreshdata/README.md index 58e8fabf1..d3ece31ba 100644 --- a/platform/docs/sdks/refreshdata/README.md +++ b/platform/docs/sdks/refreshdata/README.md @@ -3,7 +3,7 @@ ## Overview -Asynchronously retrieve data from an integration to refresh data in Codat. +Initiate data refreshes, view pull status and history. ### Available Operations @@ -39,9 +39,10 @@ req = operations.RefreshCompanyDataRequest( res = s.refresh_data.all(req) -if res.status_code == 200: +if res is not None: # handle response pass + ``` ### Parameters @@ -60,7 +61,7 @@ if res.status_code == 200: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## by_data_type @@ -90,6 +91,7 @@ res = s.refresh_data.by_data_type(req) if res.pull_operation is not None: # handle response pass + ``` ### Parameters @@ -108,7 +110,7 @@ if res.pull_operation is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get @@ -135,6 +137,7 @@ res = s.refresh_data.get(req) if res.data_statuses is not None: # handle response pass + ``` ### Parameters @@ -153,7 +156,7 @@ if res.data_statuses is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get_pull_operation @@ -181,6 +184,7 @@ res = s.refresh_data.get_pull_operation(req) if res.pull_operation is not None: # handle response pass + ``` ### Parameters @@ -199,7 +203,7 @@ if res.pull_operation is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list_pull_operations @@ -229,6 +233,7 @@ res = s.refresh_data.list_pull_operations(req) if res.pull_operations is not None: # handle response pass + ``` ### Parameters @@ -247,4 +252,4 @@ if res.pull_operations is not None: | Error Object | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.ErrorMessage | 400,401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/settings/README.md b/platform/docs/sdks/settings/README.md index 115c2c1d1..c97ec83ea 100644 --- a/platform/docs/sdks/settings/README.md +++ b/platform/docs/sdks/settings/README.md @@ -3,7 +3,7 @@ ## Overview -Manage your Codat instance. +Manage company profile configuration, sync settings, and API keys. ### Available Operations @@ -50,6 +50,7 @@ res = s.settings.create_api_key(req) if res.api_key_details is not None: # handle response pass + ``` ### Parameters @@ -68,7 +69,7 @@ if res.api_key_details is not None: | Error Object | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.ErrorMessage | 400,401,402,403,409,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## delete_api_key @@ -104,6 +105,7 @@ res = s.settings.delete_api_key(req) if res.error_message is not None: # handle response pass + ``` ### Parameters @@ -122,7 +124,7 @@ if res.error_message is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get_profile @@ -146,6 +148,7 @@ res = s.settings.get_profile() if res.profile is not None: # handle response pass + ``` ### Parameters @@ -163,7 +166,7 @@ if res.profile is not None: | Error Object | Status Code | Content Type | | ----------------------- | ----------------------- | ----------------------- | | errors.ErrorMessage | 401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get_sync_settings @@ -187,6 +190,7 @@ res = s.settings.get_sync_settings() if res.sync_settings is not None: # handle response pass + ``` ### Parameters @@ -204,7 +208,7 @@ if res.sync_settings is not None: | Error Object | Status Code | Content Type | | ----------------------- | ----------------------- | ----------------------- | | errors.ErrorMessage | 401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list_api_keys @@ -232,6 +236,7 @@ res = s.settings.list_api_keys() if res.api_keys is not None: # handle response pass + ``` ### Parameters @@ -249,7 +254,7 @@ if res.api_keys is not None: | Error Object | Status Code | Content Type | | ----------------------- | ----------------------- | ----------------------- | | errors.ErrorMessage | 401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## update_profile @@ -286,6 +291,7 @@ res = s.settings.update_profile(req) if res.profile is not None: # handle response pass + ``` ### Parameters @@ -304,7 +310,7 @@ if res.profile is not None: | Error Object | Status Code | Content Type | | ----------------------- | ----------------------- | ----------------------- | | errors.ErrorMessage | 401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## update_sync_settings @@ -340,9 +346,10 @@ req = operations.UpdateProfileSyncSettingsRequestBody( res = s.settings.update_sync_settings(req) -if res.status_code == 200: +if res is not None: # handle response pass + ``` ### Parameters @@ -361,4 +368,4 @@ if res.status_code == 200: | Error Object | Status Code | Content Type | | ----------------------- | ----------------------- | ----------------------- | | errors.ErrorMessage | 401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/supplementaldata/README.md b/platform/docs/sdks/supplementaldata/README.md index 24b81cfcc..fe767b1f1 100644 --- a/platform/docs/sdks/supplementaldata/README.md +++ b/platform/docs/sdks/supplementaldata/README.md @@ -3,7 +3,7 @@ ## Overview -View and configure supplemental data for supported data types. +Configure and pull additional data you can include in Codat's standard data types. ### Available Operations @@ -51,9 +51,10 @@ req = operations.ConfigureSupplementalDataRequest( res = s.supplemental_data.configure(req) -if res.status_code == 200: +if res is not None: # handle response pass + ``` ### Parameters @@ -72,7 +73,7 @@ if res.status_code == 200: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## get_configuration @@ -102,6 +103,7 @@ res = s.supplemental_data.get_configuration(req) if res.supplemental_data_configuration is not None: # handle response pass + ``` ### Parameters @@ -120,4 +122,4 @@ if res.supplemental_data_configuration is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/docs/sdks/webhooks/README.md b/platform/docs/sdks/webhooks/README.md index 77bff7e3d..afe34fd2e 100644 --- a/platform/docs/sdks/webhooks/README.md +++ b/platform/docs/sdks/webhooks/README.md @@ -3,7 +3,7 @@ ## Overview -Manage webhooks, rules, and events. +Create and manage webhooks that listen to Codat's events. ### Available Operations @@ -48,6 +48,7 @@ res = s.webhooks.create(req) if res.webhook is not None: # handle response pass + ``` ### Parameters @@ -66,7 +67,7 @@ if res.webhook is not None: | Error Object | Status Code | Content Type | | ----------------------- | ----------------------- | ----------------------- | | errors.ErrorMessage | 401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## create_consumer @@ -86,13 +87,16 @@ s = codatplatform.CodatPlatform( ), ) -req = shared.WebhookConsumerPrototype() +req = shared.WebhookConsumerPrototype( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) res = s.webhooks.create_consumer(req) if res.webhook_consumer is not None: # handle response pass + ``` ### Parameters @@ -111,7 +115,7 @@ if res.webhook_consumer is not None: | Error Object | Status Code | Content Type | | ----------------------- | ----------------------- | ----------------------- | | errors.ErrorMessage | 401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## delete_consumer @@ -137,9 +141,10 @@ req = operations.DeleteWebhookConsumerRequest( res = s.webhooks.delete_consumer(req) -if res.status_code == 200: +if res is not None: # handle response pass + ``` ### Parameters @@ -158,7 +163,7 @@ if res.status_code == 200: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## ~~get~~ @@ -187,6 +192,7 @@ res = s.webhooks.get(req) if res.webhook is not None: # handle response pass + ``` ### Parameters @@ -205,7 +211,7 @@ if res.webhook is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## ~~list~~ @@ -236,6 +242,7 @@ res = s.webhooks.list(req) if res.webhooks is not None: # handle response pass + ``` ### Parameters @@ -254,7 +261,7 @@ if res.webhooks is not None: | Error Object | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.ErrorMessage | 400,401,402,403,404,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | ## list_consumers @@ -280,6 +287,7 @@ res = s.webhooks.list_consumers() if res.webhook_consumers is not None: # handle response pass + ``` ### Parameters @@ -297,4 +305,4 @@ if res.webhook_consumers is not None: | Error Object | Status Code | Content Type | | --------------------------- | --------------------------- | --------------------------- | | errors.ErrorMessage | 400,401,402,403,429,500,503 | application/json | -| errors.SDKError | 4x-5xx | */* | +| errors.SDKError | 4xx-5xx | */* | diff --git a/platform/gen.yaml b/platform/gen.yaml index e67abde1f..a3b2c411b 100644 --- a/platform/gen.yaml +++ b/platform/gen.yaml @@ -11,7 +11,7 @@ generation: oAuth2ClientCredentialsEnabled: false telemetryEnabled: true python: - version: 3.4.0 + version: 3.5.0 additionalDependencies: dependencies: {} extraDependencies: @@ -32,3 +32,5 @@ python: maxMethodParams: 0 outputModelSuffix: output packageName: codat-platform + projectUrls: {} + responseFormat: envelope diff --git a/platform/py.typed b/platform/py.typed new file mode 100644 index 000000000..3e38f1a92 --- /dev/null +++ b/platform/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561. The package enables type hints. diff --git a/platform/pylintrc b/platform/pylintrc index 0690edafd..6a1c3fc06 100644 --- a/platform/pylintrc +++ b/platform/pylintrc @@ -442,7 +442,8 @@ disable=raw-checker-failed, too-many-nested-blocks, too-many-boolean-expressions, no-else-raise, - bare-except + bare-except, + broad-exception-caught # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option diff --git a/platform/setup.py b/platform/setup.py index 7b798d0d5..652d28330 100644 --- a/platform/setup.py +++ b/platform/setup.py @@ -1,21 +1,31 @@ """Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" import setuptools +import re try: - with open("README.md", "r") as fh: + with open('README.md', 'r') as fh: long_description = fh.read() + GITHUB_URL = 'https://github.com/codatio/client-sdk-python.git' + GITHUB_URL = GITHUB_URL[: -len('.git')] if GITHUB_URL.endswith('.git') else GITHUB_URL + # links on PyPI should have absolute URLs + long_description = re.sub( + r'(\[[^\]]+\]\()((?!https?:)[^\)]+)(\))', + lambda m: m.group(1) + GITHUB_URL + '/blob/master/' + m.group(2) + m.group(3), + long_description, + ) except FileNotFoundError: - long_description = "" + long_description = '' setuptools.setup( - name="codat-platform", - version="3.4.0", - author="Codat", - description="Manage the building blocks of Codat, including companies, connections, and more.", + name='codat-platform', + version='3.5.0', + author='Codat', + description='Manage the building blocks of Codat, including companies, connections, and more.', + url='https://github.com/codatio/client-sdk-python.git', long_description=long_description, - long_description_content_type="text/markdown", - packages=setuptools.find_packages(where="src"), + long_description_content_type='text/markdown', + packages=setuptools.find_packages(where='src'), install_requires=[ "certifi>=2023.7.22", "charset-normalizer>=3.2.0", @@ -34,10 +44,12 @@ ], extras_require={ "dev": [ - "pylint==2.16.2", + "pylint==3.1.0", ], }, package_dir={'': 'src'}, python_requires='>=3.8', - package_data={"codat-platform": ["py.typed"]}, + package_data={ + 'codat-platform': ['py.typed'] + }, ) diff --git a/platform/src/codatplatform/_hooks/sdkhooks.py b/platform/src/codatplatform/_hooks/sdkhooks.py index a9ba878fa..17750b62c 100644 --- a/platform/src/codatplatform/_hooks/sdkhooks.py +++ b/platform/src/codatplatform/_hooks/sdkhooks.py @@ -3,16 +3,15 @@ import requests from .types import SDKInitHook, BeforeRequestContext, BeforeRequestHook, AfterSuccessContext, AfterSuccessHook, AfterErrorContext, AfterErrorHook, Hooks from .registration import init_hooks -from typing import List, Optional, Tuple, Union +from typing import List, Optional, Tuple class SDKHooks(Hooks): - sdk_init_hooks: List[SDKInitHook] = [] - before_request_hooks: List[BeforeRequestHook] = [] - after_success_hooks: List[AfterSuccessHook] = [] - after_error_hooks: List[AfterErrorHook] = [] - def __init__(self): + self.sdk_init_hooks: List[SDKInitHook] = [] + self.before_request_hooks: List[BeforeRequestHook] = [] + self.after_success_hooks: List[AfterSuccessHook] = [] + self.after_error_hooks: List[AfterErrorHook] = [] init_hooks(self) def register_sdk_init_hook(self, hook: SDKInitHook) -> None: @@ -32,19 +31,21 @@ def sdk_init(self, base_url: str, client: requests.Session) -> Tuple[str, reques base_url, client = hook.sdk_init(base_url, client) return base_url, client - def before_request(self, hook_ctx: BeforeRequestContext, request: requests.PreparedRequest) -> Union[requests.PreparedRequest, Exception]: + def before_request(self, hook_ctx: BeforeRequestContext, request: requests.PreparedRequest) -> requests.PreparedRequest: for hook in self.before_request_hooks: - request = hook.before_request(hook_ctx, request) - if isinstance(request, Exception): - raise request + out = hook.before_request(hook_ctx, request) + if isinstance(out, Exception): + raise out + request = out return request def after_success(self, hook_ctx: AfterSuccessContext, response: requests.Response) -> requests.Response: for hook in self.after_success_hooks: - response = hook.after_success(hook_ctx, response) - if isinstance(response, Exception): - raise response + out = hook.after_success(hook_ctx, response) + if isinstance(out, Exception): + raise out + response = out return response def after_error(self, hook_ctx: AfterErrorContext, response: Optional[requests.Response], error: Optional[Exception]) -> Tuple[Optional[requests.Response], Optional[Exception]]: diff --git a/platform/src/codatplatform/_hooks/types.py b/platform/src/codatplatform/_hooks/types.py index d2fa8629f..b24c14146 100644 --- a/platform/src/codatplatform/_hooks/types.py +++ b/platform/src/codatplatform/_hooks/types.py @@ -17,15 +17,19 @@ def __init__(self, operation_id: str, oauth2_scopes: Optional[List[str]], securi class BeforeRequestContext(HookContext): - pass + def __init__(self, hook_ctx: HookContext): + super().__init__(hook_ctx.operation_id, hook_ctx.oauth2_scopes, hook_ctx.security_source) class AfterSuccessContext(HookContext): - pass + def __init__(self, hook_ctx: HookContext): + super().__init__(hook_ctx.operation_id, hook_ctx.oauth2_scopes, hook_ctx.security_source) + class AfterErrorContext(HookContext): - pass + def __init__(self, hook_ctx: HookContext): + super().__init__(hook_ctx.operation_id, hook_ctx.oauth2_scopes, hook_ctx.security_source) class SDKInitHook(ABC): @@ -42,13 +46,13 @@ def before_request(self, hook_ctx: BeforeRequestContext, request: requests_http. class AfterSuccessHook(ABC): @abstractmethod - def after_success(self, hook_ctx: AfterSuccessContext, response: requests_http.Response) -> Union[requests_http.PreparedRequest, Exception]: + def after_success(self, hook_ctx: AfterSuccessContext, response: requests_http.Response) -> Union[requests_http.Response, Exception]: pass class AfterErrorHook(ABC): @abstractmethod - def after_error(self, hook_ctx: AfterErrorContext, response: Optional[requests_http.Response], error: Optional[Exception]) -> Union[Tuple[Optional[requests_http.PreparedRequest], Optional[Exception]], Exception]: + def after_error(self, hook_ctx: AfterErrorContext, response: Optional[requests_http.Response], error: Optional[Exception]) -> Union[Tuple[Optional[requests_http.Response], Optional[Exception]], Exception]: pass diff --git a/platform/src/codatplatform/companies.py b/platform/src/codatplatform/companies.py index 4a69d60c8..fca9672c9 100644 --- a/platform/src/codatplatform/companies.py +++ b/platform/src/codatplatform/companies.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class Companies: - r"""Create and manage your Codat companies.""" + r"""Create and manage your SMB users' companies.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -29,18 +29,18 @@ def create(self, request: Optional[shared.CompanyRequestBody], retries: Optional base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/companies' - headers = {} + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, Optional[shared.CompanyRequestBody], "request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -50,26 +50,26 @@ def create(self, request: Optional[shared.CompanyRequestBody], retries: Optional else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -79,25 +79,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.CreateCompanyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.CreateCompanyResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Company]) res.company = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -113,16 +115,16 @@ def delete(self, request: operations.DeleteCompanyRequest, retries: Optional[uti hook_ctx = HookContext(operation_id='delete-company', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.DeleteCompanyRequest, base_url, '/companies/{companyId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -132,26 +134,26 @@ def delete(self, request: operations.DeleteCompanyRequest, retries: Optional[uti else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('DELETE', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('DELETE', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -161,21 +163,22 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.DeleteCompanyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.DeleteCompanyResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 204: pass elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -191,16 +194,16 @@ def get(self, request: operations.GetCompanyRequest, retries: Optional[utils.Ret hook_ctx = HookContext(operation_id='get-company', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetCompanyRequest, base_url, '/companies/{companyId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -210,26 +213,26 @@ def get(self, request: operations.GetCompanyRequest, retries: Optional[utils.Ret else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -239,25 +242,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetCompanyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetCompanyResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Company]) res.company = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -274,16 +279,16 @@ def list(self, request: operations.ListCompaniesRequest, retries: Optional[utils base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/companies' - headers = {} - query_params = utils.get_query_params(operations.ListCompaniesRequest, request) - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -293,26 +298,26 @@ def list(self, request: operations.ListCompaniesRequest, retries: Optional[utils else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, params=query_params, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -322,25 +327,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListCompaniesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListCompaniesResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Companies]) res.companies = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -357,19 +364,19 @@ def update(self, request: operations.UpdateCompanyRequest, retries: Optional[uti hook_ctx = HookContext(operation_id='update-company', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.UpdateCompanyRequest, base_url, '/companies/{companyId}', request) - headers = {} + url = utils.generate_url(base_url, '/companies/{companyId}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, operations.UpdateCompanyRequest, "company_request_body", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -379,26 +386,26 @@ def update(self, request: operations.UpdateCompanyRequest, retries: Optional[uti else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('PUT', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('PUT', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -408,26 +415,29 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.UpdateCompanyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.UpdateCompanyResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Company]) res.company = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/connection_management.py b/platform/src/codatplatform/connection_management.py new file mode 100644 index 000000000..ad427b1ce --- /dev/null +++ b/platform/src/codatplatform/connection_management.py @@ -0,0 +1,107 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .cors_settings import CorsSettings +from .sdkconfiguration import SDKConfiguration +from codatplatform import utils +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext +from codatplatform.models import errors, operations, shared +from typing import Optional + +class ConnectionManagement: + r"""Configure connection management UI and retrieve access tokens for authentication.""" + cors_settings: CorsSettings + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + self._init_sdks() + + def _init_sdks(self): + self.cors_settings = CorsSettings(self.sdk_configuration) + + + + def get_access_token(self, request: operations.GetConnectionManagementAccessTokenRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetConnectionManagementAccessTokenResponse: + r"""Get access token + Use the *Get access token* endpoint to retrieve a new access token for use by the [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management). + + The embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) lets your customers control access to their data by allowing them to manage their existing connections. + """ + hook_ctx = HookContext(operation_id='get-connection-management-access-token', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/companies/{companyId}/connectionManagement/accessToken', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + global_retry_config = self.sdk_configuration.retry_config + retry_config = retries + if retry_config is None: + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + req = None + def do_request(): + nonlocal req + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + return http_res + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + + + res = operations.GetConnectionManagementAccessTokenResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ConnectionManagementAccessToken]) + res.connection_management_access_token = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + diff --git a/platform/src/codatplatform/connections.py b/platform/src/codatplatform/connections.py index b747f5f40..893462341 100644 --- a/platform/src/codatplatform/connections.py +++ b/platform/src/codatplatform/connections.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class Connections: - r"""Manage your companies' data connections.""" + r"""Create new and manage existing data connections for a company.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -25,19 +25,19 @@ def create(self, request: operations.CreateConnectionRequest, retries: Optional[ hook_ctx = HookContext(operation_id='create-connection', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.CreateConnectionRequest, base_url, '/companies/{companyId}/connections', request) - headers = {} + url = utils.generate_url(base_url, '/companies/{companyId}/connections', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, operations.CreateConnectionRequest, "request_body", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -47,26 +47,26 @@ def create(self, request: operations.CreateConnectionRequest, retries: Optional[ else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -76,25 +76,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.CreateConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.CreateConnectionResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Connection]) res.connection = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -108,16 +110,16 @@ def delete(self, request: operations.DeleteConnectionRequest, retries: Optional[ hook_ctx = HookContext(operation_id='delete-connection', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.DeleteConnectionRequest, base_url, '/companies/{companyId}/connections/{connectionId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/connections/{connectionId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -127,26 +129,26 @@ def delete(self, request: operations.DeleteConnectionRequest, retries: Optional[ else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('DELETE', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('DELETE', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -156,21 +158,22 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.DeleteConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.DeleteConnectionResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: pass elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -183,16 +186,16 @@ def get(self, request: operations.GetConnectionRequest, retries: Optional[utils. hook_ctx = HookContext(operation_id='get-connection', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetConnectionRequest, base_url, '/companies/{companyId}/connections/{connectionId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/connections/{connectionId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -202,26 +205,26 @@ def get(self, request: operations.GetConnectionRequest, retries: Optional[utils. else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -231,25 +234,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetConnectionResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Connection]) res.connection = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -262,17 +267,17 @@ def list(self, request: operations.ListConnectionsRequest, retries: Optional[uti hook_ctx = HookContext(operation_id='list-connections', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.ListConnectionsRequest, base_url, '/companies/{companyId}/connections', request) - headers = {} - query_params = utils.get_query_params(operations.ListConnectionsRequest, request) - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/connections', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -282,26 +287,26 @@ def list(self, request: operations.ListConnectionsRequest, retries: Optional[uti else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, params=query_params, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -311,25 +316,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListConnectionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListConnectionsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Connections]) res.connections = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -342,19 +349,19 @@ def unlink(self, request: operations.UnlinkConnectionRequest, retries: Optional[ hook_ctx = HookContext(operation_id='unlink-connection', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.UnlinkConnectionRequest, base_url, '/companies/{companyId}/connections/{connectionId}', request) - headers = {} + url = utils.generate_url(base_url, '/companies/{companyId}/connections/{connectionId}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, operations.UnlinkConnectionRequest, "update_connection_status", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -364,26 +371,26 @@ def unlink(self, request: operations.UnlinkConnectionRequest, retries: Optional[ else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('PATCH', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('PATCH', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -393,25 +400,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.UnlinkConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.UnlinkConnectionResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Connection]) res.connection = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -424,19 +433,19 @@ def update_authorization(self, request: operations.UpdateConnectionAuthorization hook_ctx = HookContext(operation_id='update-connection-authorization', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.UpdateConnectionAuthorizationRequest, base_url, '/companies/{companyId}/connections/{connectionId}/authorization', request) - headers = {} + url = utils.generate_url(base_url, '/companies/{companyId}/connections/{connectionId}/authorization', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, operations.UpdateConnectionAuthorizationRequest, "request_body", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -446,26 +455,26 @@ def update_authorization(self, request: operations.UpdateConnectionAuthorization else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('PUT', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('PUT', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -475,26 +484,29 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.UpdateConnectionAuthorizationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.UpdateConnectionAuthorizationResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Connection]) res.connection = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/cors_settings.py b/platform/src/codatplatform/cors_settings.py new file mode 100644 index 000000000..02800efb8 --- /dev/null +++ b/platform/src/codatplatform/cors_settings.py @@ -0,0 +1,190 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .sdkconfiguration import SDKConfiguration +from codatplatform import utils +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext +from codatplatform.models import errors, operations, shared +from typing import Optional + +class CorsSettings: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get(self, retries: Optional[utils.RetryConfig] = None) -> operations.GetConnectionManagementCorsSettingsResponse: + r"""Get CORS settings + The *Get CORS settings* endpoint returns the allowed origins (i.e. your domains) you want to allow cross-origin resource sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)) with Codat. + + Enabling CORS with Codat is required by our embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) to access Codat's API endpoints. + + The embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) lets your customers control access to their data by allowing them to manage their existing connections. + """ + hook_ctx = HookContext(operation_id='get-connection-management-cors-settings', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/connectionManagement/corsSettings' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + global_retry_config = self.sdk_configuration.retry_config + retry_config = retries + if retry_config is None: + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + req = None + def do_request(): + nonlocal req + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + return http_res + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + + + res = operations.GetConnectionManagementCorsSettingsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ConnectionManagementAllowedOrigins]) + res.connection_management_allowed_origins = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def set(self, request: Optional[shared.ConnectionManagementAllowedOrigins], retries: Optional[utils.RetryConfig] = None) -> operations.SetConnectionManagementCorsSettingsResponse: + r"""Set CORS settings + The *Set CORS settings* endpoint allows you to register allowed origins (i.e. your domains) for use in cross-origin resource sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)). + + Enabling CORS with Codat is required by our embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) to access Codat's API endpoints. + + The embedded [connection management UI](https://docs.codat.io/auth-flow/optimize/connection-management) lets your customers control access to their data by allowing them to manage their existing connections. + """ + hook_ctx = HookContext(operation_id='set-connection-management-cors-settings', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/connectionManagement/corsSettings' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + req_content_type, data, form = utils.serialize_request_body(request, Optional[shared.ConnectionManagementAllowedOrigins], "request", False, True, 'json') + if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + global_retry_config = self.sdk_configuration.retry_config + retry_config = retries + if retry_config is None: + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + req = None + def do_request(): + nonlocal req + try: + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + return http_res + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + + + res = operations.SetConnectionManagementCorsSettingsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ConnectionManagementAllowedOrigins]) + res.connection_management_allowed_origins = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + diff --git a/platform/src/codatplatform/custom_data_type.py b/platform/src/codatplatform/custom_data_type.py index 737669dd9..67966b216 100644 --- a/platform/src/codatplatform/custom_data_type.py +++ b/platform/src/codatplatform/custom_data_type.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class CustomDataType: - r"""View and configure custom data types for supported integrations.""" + r"""Configure and pull additional data types that are not included in Codat's standardized data model.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -33,19 +33,19 @@ def configure(self, request: operations.ConfigureCustomDataTypeRequest, retries: hook_ctx = HookContext(operation_id='configure-custom-data-type', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.ConfigureCustomDataTypeRequest, base_url, '/integrations/{platformKey}/dataTypes/custom/{customDataIdentifier}', request) - headers = {} + url = utils.generate_url(base_url, '/integrations/{platformKey}/dataTypes/custom/{customDataIdentifier}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, operations.ConfigureCustomDataTypeRequest, "custom_data_type_configuration", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -55,26 +55,26 @@ def configure(self, request: operations.ConfigureCustomDataTypeRequest, retries: else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('PUT', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('PUT', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -84,25 +84,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ConfigureCustomDataTypeResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ConfigureCustomDataTypeResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.CustomDataTypeConfiguration]) res.custom_data_type_configuration = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -117,16 +119,16 @@ def get_configuration(self, request: operations.GetCustomDataTypeConfigurationRe hook_ctx = HookContext(operation_id='get-custom-data-type-configuration', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetCustomDataTypeConfigurationRequest, base_url, '/integrations/{platformKey}/dataTypes/custom/{customDataIdentifier}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/integrations/{platformKey}/dataTypes/custom/{customDataIdentifier}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -136,26 +138,26 @@ def get_configuration(self, request: operations.GetCustomDataTypeConfigurationRe else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -165,25 +167,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetCustomDataTypeConfigurationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetCustomDataTypeConfigurationResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.CustomDataTypeRecords]) res.custom_data_type_records = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -198,17 +202,17 @@ def list(self, request: operations.ListCustomDataTypeRecordsRequest, retries: Op hook_ctx = HookContext(operation_id='list-custom-data-type-records', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.ListCustomDataTypeRecordsRequest, base_url, '/companies/{companyId}/connections/{connectionId}/data/custom/{customDataIdentifier}', request) - headers = {} - query_params = utils.get_query_params(operations.ListCustomDataTypeRecordsRequest, request) - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/connections/{connectionId}/data/custom/{customDataIdentifier}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -218,26 +222,26 @@ def list(self, request: operations.ListCustomDataTypeRecordsRequest, retries: Op else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, params=query_params, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','404','429','451','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -247,25 +251,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListCustomDataTypeRecordsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListCustomDataTypeRecordsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.CustomDataTypeRecords]) res.custom_data_type_records = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 404, 429, 451, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -278,16 +284,16 @@ def refresh(self, request: operations.RefreshCustomDataTypeRequest, retries: Opt hook_ctx = HookContext(operation_id='refresh-custom-data-type', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.RefreshCustomDataTypeRequest, base_url, '/companies/{companyId}/connections/{connectionId}/data/queue/custom/{customDataIdentifier}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/connections/{connectionId}/data/queue/custom/{customDataIdentifier}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -297,26 +303,26 @@ def refresh(self, request: operations.RefreshCustomDataTypeRequest, retries: Opt else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','451','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -326,26 +332,29 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.RefreshCustomDataTypeResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.RefreshCustomDataTypeResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.PullOperation]) res.pull_operation = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 451, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/groups.py b/platform/src/codatplatform/groups.py index c697a8555..07e5d5805 100644 --- a/platform/src/codatplatform/groups.py +++ b/platform/src/codatplatform/groups.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class Groups: - r"""Create groups and link them to your Codat companies.""" + r"""Define and manage sets of companies based on a chosen characteristic.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -25,19 +25,19 @@ def add_company(self, request: operations.AddCompanyToGroupRequest, retries: Opt hook_ctx = HookContext(operation_id='add-company-to-group', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.AddCompanyToGroupRequest, base_url, '/companies/{companyId}/groups', request) - headers = {} + url = utils.generate_url(base_url, '/companies/{companyId}/groups', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, operations.AddCompanyToGroupRequest, "company_group_assignment", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -47,26 +47,26 @@ def add_company(self, request: operations.AddCompanyToGroupRequest, retries: Opt else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('PATCH', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('PATCH', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -76,25 +76,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.AddCompanyToGroupResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.AddCompanyToGroupResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Company]) res.company = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -115,18 +117,18 @@ def create(self, request: Optional[shared.GroupPrototype], retries: Optional[uti base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/groups' - headers = {} + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, Optional[shared.GroupPrototype], "request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -136,26 +138,26 @@ def create(self, request: Optional[shared.GroupPrototype], retries: Optional[uti else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','409','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -165,25 +167,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.CreateGroupResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.CreateGroupResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Group]) res.group = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 409, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -199,15 +203,15 @@ def list(self, retries: Optional[utils.RetryConfig] = None) -> operations.ListGr base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/groups' - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -217,26 +221,26 @@ def list(self, retries: Optional[utils.RetryConfig] = None) -> operations.ListGr else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -246,25 +250,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListGroupsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListGroupsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Groups]) res.groups = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -279,16 +285,16 @@ def remove_company(self, request: operations.RemoveCompanyFromGroupRequest, retr hook_ctx = HookContext(operation_id='remove-company-from-group', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.RemoveCompanyFromGroupRequest, base_url, '/companies/{companyId}/groups/{groupId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/groups/{groupId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -298,26 +304,26 @@ def remove_company(self, request: operations.RemoveCompanyFromGroupRequest, retr else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('DELETE', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('DELETE', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -327,22 +333,24 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.RemoveCompanyFromGroupResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.RemoveCompanyFromGroupResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 204: pass elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/integrations.py b/platform/src/codatplatform/integrations.py index 5139840c7..4d32fead2 100644 --- a/platform/src/codatplatform/integrations.py +++ b/platform/src/codatplatform/integrations.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class Integrations: - r"""View and manage your available integrations in Codat.""" + r"""Get a list of integrations supported by Codat and their logos.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -23,16 +23,16 @@ def get(self, request: operations.GetIntegrationRequest, retries: Optional[utils hook_ctx = HookContext(operation_id='get-integration', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetIntegrationRequest, base_url, '/integrations/{platformKey}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/integrations/{platformKey}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -42,26 +42,26 @@ def get(self, request: operations.GetIntegrationRequest, retries: Optional[utils else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -71,25 +71,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetIntegrationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetIntegrationResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Integration]) res.integration = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -102,16 +104,16 @@ def get_branding(self, request: operations.GetIntegrationsBrandingRequest, retri hook_ctx = HookContext(operation_id='get-integrations-branding', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetIntegrationsBrandingRequest, base_url, '/integrations/{platformKey}/branding', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/integrations/{platformKey}/branding', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -121,26 +123,26 @@ def get_branding(self, request: operations.GetIntegrationsBrandingRequest, retri else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -150,25 +152,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetIntegrationsBrandingResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetIntegrationsBrandingResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Branding]) res.branding = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -182,16 +186,16 @@ def list(self, request: operations.ListIntegrationsRequest, retries: Optional[ut base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/integrations' - headers = {} - query_params = utils.get_query_params(operations.ListIntegrationsRequest, request) - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -201,26 +205,26 @@ def list(self, request: operations.ListIntegrationsRequest, retries: Optional[ut else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, params=query_params, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -230,26 +234,29 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListIntegrationsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListIntegrationsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Integrations]) res.integrations = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/models/operations/__init__.py b/platform/src/codatplatform/models/operations/__init__.py index 09c7bba09..9b8ad0f16 100644 --- a/platform/src/codatplatform/models/operations/__init__.py +++ b/platform/src/codatplatform/models/operations/__init__.py @@ -17,6 +17,8 @@ from .get_company_data_status import * from .get_company_push_history import * from .get_connection import * +from .get_connection_management_access_token import * +from .get_connection_management_cors_settings import * from .get_create_update_model_options_by_data_type import * from .get_custom_data_type_configuration import * from .get_integration import * @@ -40,10 +42,11 @@ from .refresh_custom_data_type import * from .refresh_data_type import * from .remove_company_from_group import * +from .set_connection_management_cors_settings import * from .unlink_connection import * from .update_company import * from .update_connection_authorization import * from .update_profile import * from .update_profile_syncsettings import * -__all__ = ["AddCompanyToGroupRequest","AddCompanyToGroupResponse","ConfigureCustomDataTypeRequest","ConfigureCustomDataTypeResponse","ConfigureSupplementalDataRequest","ConfigureSupplementalDataResponse","CreateAPIKeyResponse","CreateCompanyResponse","CreateConnectionRequest","CreateConnectionRequestBody","CreateConnectionResponse","CreateGroupResponse","CreateRuleResponse","CreateWebhookConsumerResponse","DataType","DeleteAPIKeyRequest","DeleteAPIKeyResponse","DeleteCompanyRequest","DeleteCompanyResponse","DeleteConnectionRequest","DeleteConnectionResponse","DeleteWebhookConsumerRequest","DeleteWebhookConsumerResponse","GetCompanyDataStatusRequest","GetCompanyDataStatusResponse","GetCompanyPushHistoryRequest","GetCompanyPushHistoryResponse","GetCompanyRequest","GetCompanyResponse","GetConnectionRequest","GetConnectionResponse","GetCreateUpdateModelOptionsByDataTypeRequest","GetCreateUpdateModelOptionsByDataTypeResponse","GetCustomDataTypeConfigurationRequest","GetCustomDataTypeConfigurationResponse","GetIntegrationRequest","GetIntegrationResponse","GetIntegrationsBrandingRequest","GetIntegrationsBrandingResponse","GetProfileResponse","GetProfileSyncSettingsResponse","GetPullOperationRequest","GetPullOperationResponse","GetPushOperationRequest","GetPushOperationResponse","GetSupplementalDataConfigurationRequest","GetSupplementalDataConfigurationResponse","GetWebhookRequest","GetWebhookResponse","ListAPIKeysResponse","ListCompaniesRequest","ListCompaniesResponse","ListConnectionsRequest","ListConnectionsResponse","ListCustomDataTypeRecordsRequest","ListCustomDataTypeRecordsResponse","ListGroupsResponse","ListIntegrationsRequest","ListIntegrationsResponse","ListPullOperationsRequest","ListPullOperationsResponse","ListRulesRequest","ListRulesResponse","ListWebhookConsumersResponse","PathParamDataType","RefreshCompanyDataRequest","RefreshCompanyDataResponse","RefreshCustomDataTypeRequest","RefreshCustomDataTypeResponse","RefreshDataTypeRequest","RefreshDataTypeResponse","RemoveCompanyFromGroupRequest","RemoveCompanyFromGroupResponse","UnlinkConnectionRequest","UnlinkConnectionResponse","UpdateCompanyRequest","UpdateCompanyResponse","UpdateConnectionAuthorizationRequest","UpdateConnectionAuthorizationResponse","UpdateProfileResponse","UpdateProfileSyncSettingsRequestBody","UpdateProfileSyncSettingsResponse"] +__all__ = ["AddCompanyToGroupRequest","AddCompanyToGroupResponse","ConfigureCustomDataTypeRequest","ConfigureCustomDataTypeResponse","ConfigureSupplementalDataRequest","ConfigureSupplementalDataResponse","CreateAPIKeyResponse","CreateCompanyResponse","CreateConnectionRequest","CreateConnectionRequestBody","CreateConnectionResponse","CreateGroupResponse","CreateRuleResponse","CreateWebhookConsumerResponse","DataType","DeleteAPIKeyRequest","DeleteAPIKeyResponse","DeleteCompanyRequest","DeleteCompanyResponse","DeleteConnectionRequest","DeleteConnectionResponse","DeleteWebhookConsumerRequest","DeleteWebhookConsumerResponse","GetCompanyDataStatusRequest","GetCompanyDataStatusResponse","GetCompanyPushHistoryRequest","GetCompanyPushHistoryResponse","GetCompanyRequest","GetCompanyResponse","GetConnectionManagementAccessTokenRequest","GetConnectionManagementAccessTokenResponse","GetConnectionManagementCorsSettingsResponse","GetConnectionRequest","GetConnectionResponse","GetCreateUpdateModelOptionsByDataTypeRequest","GetCreateUpdateModelOptionsByDataTypeResponse","GetCustomDataTypeConfigurationRequest","GetCustomDataTypeConfigurationResponse","GetIntegrationRequest","GetIntegrationResponse","GetIntegrationsBrandingRequest","GetIntegrationsBrandingResponse","GetProfileResponse","GetProfileSyncSettingsResponse","GetPullOperationRequest","GetPullOperationResponse","GetPushOperationRequest","GetPushOperationResponse","GetSupplementalDataConfigurationRequest","GetSupplementalDataConfigurationResponse","GetWebhookRequest","GetWebhookResponse","ListAPIKeysResponse","ListCompaniesRequest","ListCompaniesResponse","ListConnectionsRequest","ListConnectionsResponse","ListCustomDataTypeRecordsRequest","ListCustomDataTypeRecordsResponse","ListGroupsResponse","ListIntegrationsRequest","ListIntegrationsResponse","ListPullOperationsRequest","ListPullOperationsResponse","ListRulesRequest","ListRulesResponse","ListWebhookConsumersResponse","PathParamDataType","RefreshCompanyDataRequest","RefreshCompanyDataResponse","RefreshCustomDataTypeRequest","RefreshCustomDataTypeResponse","RefreshDataTypeRequest","RefreshDataTypeResponse","RemoveCompanyFromGroupRequest","RemoveCompanyFromGroupResponse","SetConnectionManagementCorsSettingsResponse","UnlinkConnectionRequest","UnlinkConnectionResponse","UpdateCompanyRequest","UpdateCompanyResponse","UpdateConnectionAuthorizationRequest","UpdateConnectionAuthorizationResponse","UpdateProfileResponse","UpdateProfileSyncSettingsRequestBody","UpdateProfileSyncSettingsResponse"] diff --git a/platform/src/codatplatform/models/operations/get_company_data_status.py b/platform/src/codatplatform/models/operations/get_company_data_status.py index 42d6e8b25..dbe63c4a9 100644 --- a/platform/src/codatplatform/models/operations/get_company_data_status.py +++ b/platform/src/codatplatform/models/operations/get_company_data_status.py @@ -3,8 +3,8 @@ from __future__ import annotations import dataclasses import requests as requests_http -from ...models.shared import datastatus as shared_datastatus -from typing import Dict, Optional +from ...models.shared import datastatuses as shared_datastatuses +from typing import Optional @dataclasses.dataclass @@ -23,7 +23,7 @@ class GetCompanyDataStatusResponse: r"""HTTP response status code for this operation""" raw_response: requests_http.Response = dataclasses.field() r"""Raw HTTP response; suitable for custom response parsing""" - data_statuses: Optional[Dict[str, shared_datastatus.DataStatus]] = dataclasses.field(default=None) + data_statuses: Optional[shared_datastatuses.DataStatuses] = dataclasses.field(default=None) r"""OK""" diff --git a/platform/src/codatplatform/models/operations/get_connection_management_access_token.py b/platform/src/codatplatform/models/operations/get_connection_management_access_token.py new file mode 100644 index 000000000..1e23b95a3 --- /dev/null +++ b/platform/src/codatplatform/models/operations/get_connection_management_access_token.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.shared import connectionmanagementaccesstoken as shared_connectionmanagementaccesstoken +from typing import Optional + + +@dataclasses.dataclass +class GetConnectionManagementAccessTokenRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + r"""Unique identifier for a company.""" + + + + +@dataclasses.dataclass +class GetConnectionManagementAccessTokenResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + connection_management_access_token: Optional[shared_connectionmanagementaccesstoken.ConnectionManagementAccessToken] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/platform/src/codatplatform/models/operations/get_connection_management_cors_settings.py b/platform/src/codatplatform/models/operations/get_connection_management_cors_settings.py new file mode 100644 index 000000000..9065e12a0 --- /dev/null +++ b/platform/src/codatplatform/models/operations/get_connection_management_cors_settings.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.shared import connectionmanagementallowedorigins as shared_connectionmanagementallowedorigins +from typing import Optional + + +@dataclasses.dataclass +class GetConnectionManagementCorsSettingsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + connection_management_allowed_origins: Optional[shared_connectionmanagementallowedorigins.ConnectionManagementAllowedOrigins] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/platform/src/codatplatform/models/operations/set_connection_management_cors_settings.py b/platform/src/codatplatform/models/operations/set_connection_management_cors_settings.py new file mode 100644 index 000000000..08f5da11f --- /dev/null +++ b/platform/src/codatplatform/models/operations/set_connection_management_cors_settings.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ...models.shared import connectionmanagementallowedorigins as shared_connectionmanagementallowedorigins +from typing import Optional + + +@dataclasses.dataclass +class SetConnectionManagementCorsSettingsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + connection_management_allowed_origins: Optional[shared_connectionmanagementallowedorigins.ConnectionManagementAllowedOrigins] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/platform/src/codatplatform/models/shared/__init__.py b/platform/src/codatplatform/models/shared/__init__.py index 28a0976a2..e9b6abb2d 100644 --- a/platform/src/codatplatform/models/shared/__init__.py +++ b/platform/src/codatplatform/models/shared/__init__.py @@ -15,6 +15,8 @@ from .companygroupassignment import * from .companyrequestbody import * from .connection import * +from .connectionmanagementaccesstoken import * +from .connectionmanagementallowedorigins import * from .connections import * from .connectionstatuschangedwebhook import * from .connectionstatuschangedwebhookdata import * @@ -29,6 +31,7 @@ from .datasetstatuschangederrorwebhook import * from .datasetstatuschangederrorwebhookdata import * from .datastatus import * +from .datastatuses import * from .datasynccompletedwebhook import * from .datasynccompletedwebhookdata import * from .datatype import * @@ -70,6 +73,7 @@ from .schema_datatype import * from .security import * from .sourcetype import * +from .status import * from .supplementaldataconfiguration import * from .supportedfeature import * from .syncsetting import * @@ -84,4 +88,4 @@ from .webhooknotifier import * from .webhooks import * -__all__ = ["APIKeyDetails","APIKeys","Branding","BrandingButton","BrandingImage","BrandingLogo","ClientRateLimitReachedWebhook","ClientRateLimitReachedWebhookData","ClientRateLimitResetWebhook","ClientRateLimitResetWebhookData","Companies","Company","CompanyGroupAssignment","CompanyRequestBody","Connection","ConnectionStatusChangedWebhook","ConnectionStatusChangedWebhookData","Connections","Content","CreateAPIKey","CreateRule","CustomDataTypeConfiguration","CustomDataTypeRecord","CustomDataTypeRecords","DataConnectionError","DataConnectionStatus","DataStatus","DataSyncCompletedWebhook","DataSyncCompletedWebhookData","DataType","DataTypeFeature","DataTypes","DatasetDataChangedWebhook","DatasetDataChangedWebhookData","DatasetStatusChangedErrorWebhook","DatasetStatusChangedErrorWebhookData","ErrorValidation","ErrorValidationItem","FeatureState","FeatureType","Group","GroupPrototype","GroupRef","Groups","HalRef","ImageReference","Integration","Integrations","Links","ModifiedDate","NewCompanySynchronizedWebhook","NewCompanySynchronizedWebhookData","Profile","PullOperation","PullOperations","PushChangeType","PushFieldValidation","PushOperation","PushOperationChange","PushOperationRef","PushOperationStatus","PushOperationStatusChangedWebhook","PushOperationStatusChangedWebhookData","PushOperationTimedOutWebhook","PushOperationTimedOutWebhookData","PushOperations","PushOption","PushOptionChoice","PushOptionProperty","PushOptionType","PushValidationInfo","SchemaDataType","Security","SourceType","Status","SupplementalDataConfiguration","SupplementalDataSourceConfiguration","SupportedFeature","SyncSetting","SyncSettings","UpdateConnectionStatus","Validation","ValidationItem","Webhook","WebhookConsumer","WebhookConsumerPrototype","WebhookConsumers","WebhookNotifier","Webhooks"] +__all__ = ["APIKeyDetails","APIKeys","Branding","BrandingButton","BrandingImage","BrandingLogo","ClientRateLimitReachedWebhook","ClientRateLimitReachedWebhookData","ClientRateLimitResetWebhook","ClientRateLimitResetWebhookData","Companies","Company","CompanyGroupAssignment","CompanyRequestBody","Connection","ConnectionManagementAccessToken","ConnectionManagementAllowedOrigins","ConnectionStatusChangedWebhook","ConnectionStatusChangedWebhookData","Connections","Content","CreateAPIKey","CreateRule","CustomDataTypeConfiguration","CustomDataTypeRecord","CustomDataTypeRecords","DataConnectionError","DataConnectionStatus","DataStatus","DataStatuses","DataSyncCompletedWebhook","DataSyncCompletedWebhookData","DataType","DataTypeFeature","DataTypes","DatasetDataChangedWebhook","DatasetDataChangedWebhookData","DatasetStatus","DatasetStatusChangedErrorWebhook","DatasetStatusChangedErrorWebhookData","ErrorValidation","ErrorValidationItem","FeatureState","FeatureType","Group","GroupPrototype","GroupRef","Groups","HalRef","ImageReference","Integration","Integrations","Links","ModifiedDate","NewCompanySynchronizedWebhook","NewCompanySynchronizedWebhookData","Profile","PullOperation","PullOperations","PushChangeType","PushFieldValidation","PushOperation","PushOperationChange","PushOperationRef","PushOperationStatus","PushOperationStatusChangedWebhook","PushOperationStatusChangedWebhookData","PushOperationTimedOutWebhook","PushOperationTimedOutWebhookData","PushOperations","PushOption","PushOptionChoice","PushOptionProperty","PushOptionType","PushValidationInfo","SchemaDataType","Security","SourceType","Status","SupplementalDataConfiguration","SupplementalDataSourceConfiguration","SupportedFeature","SyncSetting","SyncSettings","UpdateConnectionStatus","Validation","ValidationItem","Webhook","WebhookConsumer","WebhookConsumerPrototype","WebhookConsumers","WebhookNotifier","Webhooks"] diff --git a/platform/src/codatplatform/models/shared/clientratelimitreachedwebhook.py b/platform/src/codatplatform/models/shared/clientratelimitreachedwebhook.py index 9340cf545..b561431c5 100644 --- a/platform/src/codatplatform/models/shared/clientratelimitreachedwebhook.py +++ b/platform/src/codatplatform/models/shared/clientratelimitreachedwebhook.py @@ -22,7 +22,10 @@ class ClientRateLimitReachedWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/clientratelimitresetwebhook.py b/platform/src/codatplatform/models/shared/clientratelimitresetwebhook.py index b9f937d16..3859f41cf 100644 --- a/platform/src/codatplatform/models/shared/clientratelimitresetwebhook.py +++ b/platform/src/codatplatform/models/shared/clientratelimitresetwebhook.py @@ -22,7 +22,10 @@ class ClientRateLimitResetWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/connectionmanagementaccesstoken.py b/platform/src/codatplatform/models/shared/connectionmanagementaccesstoken.py new file mode 100644 index 000000000..b8f9975ed --- /dev/null +++ b/platform/src/codatplatform/models/shared/connectionmanagementaccesstoken.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatplatform import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ConnectionManagementAccessToken: + access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accessToken'), 'exclude': lambda f: f is None }}) + r"""Access token that allows SMBs to manage connections that have access to their data.""" + + diff --git a/platform/src/codatplatform/models/shared/connectionmanagementallowedorigins.py b/platform/src/codatplatform/models/shared/connectionmanagementallowedorigins.py new file mode 100644 index 000000000..0f78e667a --- /dev/null +++ b/platform/src/codatplatform/models/shared/connectionmanagementallowedorigins.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatplatform import utils +from dataclasses_json import Undefined, dataclass_json +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ConnectionManagementAllowedOrigins: + allowed_origins: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowedOrigins'), 'exclude': lambda f: f is None }}) + r"""An array of allowed origins (i.e. your domains) to permit cross-origin resource sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)).n resource sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)).""" + + diff --git a/platform/src/codatplatform/models/shared/connectionstatuschangedwebhook.py b/platform/src/codatplatform/models/shared/connectionstatuschangedwebhook.py index aa725a16a..644ebaf45 100644 --- a/platform/src/codatplatform/models/shared/connectionstatuschangedwebhook.py +++ b/platform/src/codatplatform/models/shared/connectionstatuschangedwebhook.py @@ -26,7 +26,10 @@ class ConnectionStatusChangedWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/datasetdatachangedwebhook.py b/platform/src/codatplatform/models/shared/datasetdatachangedwebhook.py index 63bcaa34d..36eccced2 100644 --- a/platform/src/codatplatform/models/shared/datasetdatachangedwebhook.py +++ b/platform/src/codatplatform/models/shared/datasetdatachangedwebhook.py @@ -37,7 +37,10 @@ class DatasetDataChangedWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/datasetstatuschangederrorwebhook.py b/platform/src/codatplatform/models/shared/datasetstatuschangederrorwebhook.py index dac725aa7..6af2da43e 100644 --- a/platform/src/codatplatform/models/shared/datasetstatuschangederrorwebhook.py +++ b/platform/src/codatplatform/models/shared/datasetstatuschangederrorwebhook.py @@ -26,7 +26,10 @@ class DatasetStatusChangedErrorWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/datastatus.py b/platform/src/codatplatform/models/shared/datastatus.py index 6fa0fdca2..ead995d44 100644 --- a/platform/src/codatplatform/models/shared/datastatus.py +++ b/platform/src/codatplatform/models/shared/datastatus.py @@ -2,6 +2,7 @@ from __future__ import annotations import dataclasses +from .status import Status from codatplatform import utils from dataclasses_json import Undefined, dataclass_json from enum import Enum @@ -58,8 +59,8 @@ class DataTypes(str, Enum): @dataclasses.dataclass class DataStatus: r"""Describes the state of data in the Codat cache for a company and data type""" - current_status: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currentStatus') }}) - r"""The current status of the dataset in Codat's cache.""" + current_status: Status = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currentStatus') }}) + r"""The current status of the dataset.""" data_type: DataTypes = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType') }}) r"""Available data types""" last_successful_sync: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastSuccessfulSync') }}) diff --git a/platform/src/codatplatform/models/shared/datastatuses.py b/platform/src/codatplatform/models/shared/datastatuses.py new file mode 100644 index 000000000..35cc3a3cf --- /dev/null +++ b/platform/src/codatplatform/models/shared/datastatuses.py @@ -0,0 +1,101 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from .datastatus import DataStatus +from codatplatform import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class DataStatuses: + account_transactions: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountTransactions'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + balance_sheet: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balanceSheet'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + bank_accounts: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bankAccounts'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + bank_transactions: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bankTransactions'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + banking_account_balances: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('banking-accountBalances'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + banking_accounts: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('banking-accounts'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + banking_transaction_categories: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('banking-transactionCategories'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + banking_transactions: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('banking-transactions'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + bill_credit_notes: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billCreditNotes'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + bill_payments: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billPayments'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + bills: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bills'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + cash_flow_statement: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cashFlowStatement'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + chart_of_accounts: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chartOfAccounts'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_company_info: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-companyInfo'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_customers: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-customers'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_disputes: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-disputes'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_locations: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-locations'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_orders: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-orders'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_payment_methods: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-paymentMethods'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_payments: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-payments'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_product_categories: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-productCategories'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_products: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-products'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_tax_components: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-taxComponents'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + commerce_transactions: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerce-transactions'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + company: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('company'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + credit_notes: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('creditNotes'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + customers: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('customers'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + direct_costs: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('directCosts'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + direct_incomes: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('directIncomes'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + invoices: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('invoices'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + item_receipts: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('itemReceipts'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + items: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('items'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + journal_entries: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('journalEntries'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + journals: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('journals'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + payment_methods: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('paymentMethods'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + payments: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payments'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + profit_and_loss: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profitAndLoss'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + purchase_orders: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('purchaseOrders'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + sales_orders: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('salesOrders'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + suppliers: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('suppliers'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + tax_rates: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('taxRates'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + tracking_categories: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('trackingCategories'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + transfers: Optional[DataStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transfers'), 'exclude': lambda f: f is None }}) + r"""Describes the state of data in the Codat cache for a company and data type""" + + diff --git a/platform/src/codatplatform/models/shared/datasynccompletedwebhook.py b/platform/src/codatplatform/models/shared/datasynccompletedwebhook.py index 74b0f107e..0d927012a 100644 --- a/platform/src/codatplatform/models/shared/datasynccompletedwebhook.py +++ b/platform/src/codatplatform/models/shared/datasynccompletedwebhook.py @@ -26,7 +26,10 @@ class DataSyncCompletedWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/newcompanysynchronizedwebhook.py b/platform/src/codatplatform/models/shared/newcompanysynchronizedwebhook.py index bfac3a7e1..d1f0415ce 100644 --- a/platform/src/codatplatform/models/shared/newcompanysynchronizedwebhook.py +++ b/platform/src/codatplatform/models/shared/newcompanysynchronizedwebhook.py @@ -26,7 +26,10 @@ class NewCompanySynchronizedWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/pulloperation.py b/platform/src/codatplatform/models/shared/pulloperation.py index bdd4683bf..2425816b3 100644 --- a/platform/src/codatplatform/models/shared/pulloperation.py +++ b/platform/src/codatplatform/models/shared/pulloperation.py @@ -7,8 +7,8 @@ from enum import Enum from typing import Optional -class Status(str, Enum): - r"""The current status of the pull operation.""" +class DatasetStatus(str, Enum): + r"""The current status of the dataset.""" INITIAL = 'Initial' QUEUED = 'Queued' FETCHING = 'Fetching' @@ -26,8 +26,6 @@ class Status(str, Enum): VALIDATION_ERROR = 'ValidationError' AUTH_ERROR = 'AuthError' CANCELLED = 'Cancelled' - ROUTING = 'Routing' - ROUTING_ERROR = 'RoutingError' NOT_SUPPORTED = 'NotSupported' RATE_LIMIT_ERROR = 'RateLimitError' PERMISSIONS_ERROR = 'PermissionsError' @@ -76,8 +74,8 @@ class PullOperation: > Not all dates from Codat will contain information about time zones. > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. """ - status: Status = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status') }}) - r"""The current status of the pull operation.""" + status: DatasetStatus = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status') }}) + r"""The current status of the dataset.""" completed: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('completed'), 'exclude': lambda f: f is None }}) r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: diff --git a/platform/src/codatplatform/models/shared/pushoperationstatuschangedwebhook.py b/platform/src/codatplatform/models/shared/pushoperationstatuschangedwebhook.py index 3159e49d5..8dfd09f6d 100644 --- a/platform/src/codatplatform/models/shared/pushoperationstatuschangedwebhook.py +++ b/platform/src/codatplatform/models/shared/pushoperationstatuschangedwebhook.py @@ -26,7 +26,10 @@ class PushOperationStatusChangedWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/pushoperationtimedoutwebhook.py b/platform/src/codatplatform/models/shared/pushoperationtimedoutwebhook.py index c34e006f0..91ffbe7cf 100644 --- a/platform/src/codatplatform/models/shared/pushoperationtimedoutwebhook.py +++ b/platform/src/codatplatform/models/shared/pushoperationtimedoutwebhook.py @@ -26,7 +26,10 @@ class PushOperationTimedOutWebhook: message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) r"""A human-readable message about the webhook.""" rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) - r"""Unique identifier for the rule.""" + r"""Unique identifier for the rule. + + Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + """ rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) r"""The type of rule.""" diff --git a/platform/src/codatplatform/models/shared/status.py b/platform/src/codatplatform/models/shared/status.py new file mode 100644 index 000000000..2e91b3026 --- /dev/null +++ b/platform/src/codatplatform/models/shared/status.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + +class Status(str, Enum): + r"""The current status of the dataset.""" + INITIAL = 'Initial' + QUEUED = 'Queued' + FETCHING = 'Fetching' + MAP_QUEUED = 'MapQueued' + MAPPING = 'Mapping' + COMPLETE = 'Complete' + FETCH_ERROR = 'FetchError' + MAP_ERROR = 'MapError' + INTERNAL_ERROR = 'InternalError' + PROCESSING_QUEUED = 'ProcessingQueued' + PROCESSING = 'Processing' + PROCESSING_ERROR = 'ProcessingError' + VALIDATION_QUEUED = 'ValidationQueued' + VALIDATING = 'Validating' + VALIDATION_ERROR = 'ValidationError' + AUTH_ERROR = 'AuthError' + CANCELLED = 'Cancelled' + NOT_SUPPORTED = 'NotSupported' + RATE_LIMIT_ERROR = 'RateLimitError' + PERMISSIONS_ERROR = 'PermissionsError' + PREREQUISITE_NOT_MET = 'PrerequisiteNotMet' diff --git a/platform/src/codatplatform/models/shared/webhookconsumer.py b/platform/src/codatplatform/models/shared/webhookconsumer.py index 694b64932..ca1c3b425 100644 --- a/platform/src/codatplatform/models/shared/webhookconsumer.py +++ b/platform/src/codatplatform/models/shared/webhookconsumer.py @@ -15,6 +15,8 @@ class WebhookConsumer: See our documentation for more details on [Codat's webhook service](https://docs.codat.io/using-the-api/webhooks/overview). """ UNSET='__SPEAKEASY_UNSET__' + company_id: Optional[str] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId'), 'exclude': lambda f: f is WebhookConsumer.UNSET }}) + r"""Unique identifier of the company to indicate company-specific events. The associated webhook consumer will receive events only for the specified ID.""" disabled: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is WebhookConsumer.UNSET }}) r"""Flag that enables or disables the endpoint from receiving events. Disabled when set to `true`.""" event_types: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('eventTypes'), 'exclude': lambda f: f is None }}) diff --git a/platform/src/codatplatform/models/shared/webhookconsumerprototype.py b/platform/src/codatplatform/models/shared/webhookconsumerprototype.py index 1383f2d31..f4f8411c9 100644 --- a/platform/src/codatplatform/models/shared/webhookconsumerprototype.py +++ b/platform/src/codatplatform/models/shared/webhookconsumerprototype.py @@ -11,6 +11,8 @@ @dataclasses.dataclass class WebhookConsumerPrototype: UNSET='__SPEAKEASY_UNSET__' + company_id: Optional[str] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId'), 'exclude': lambda f: f is WebhookConsumerPrototype.UNSET }}) + r"""Unique identifier of the company to indicate company-specific events. The associated webhook consumer will receive events only for the specified ID.""" disabled: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is WebhookConsumerPrototype.UNSET }}) r"""Flag that enables or disables the endpoint from receiving events. Disabled when set to `true`.""" event_types: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('eventTypes'), 'exclude': lambda f: f is None }}) diff --git a/platform/src/codatplatform/push_data.py b/platform/src/codatplatform/push_data.py index 3b7c60ca1..58c21ded9 100644 --- a/platform/src/codatplatform/push_data.py +++ b/platform/src/codatplatform/push_data.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class PushData: - r"""View push options and get push statuses.""" + r"""Initiate and monitor Create, Update, and Delete operations.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -32,16 +32,16 @@ def get_model_options(self, request: operations.GetCreateUpdateModelOptionsByDat hook_ctx = HookContext(operation_id='get-create-update-model-options-by-data-type', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetCreateUpdateModelOptionsByDataTypeRequest, base_url, '/companies/{companyId}/connections/{connectionId}/options/{dataType}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/connections/{connectionId}/options/{dataType}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -51,26 +51,26 @@ def get_model_options(self, request: operations.GetCreateUpdateModelOptionsByDat else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -80,25 +80,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetCreateUpdateModelOptionsByDataTypeResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetCreateUpdateModelOptionsByDataTypeResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.PushOption]) res.push_option = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -111,16 +113,16 @@ def get_operation(self, request: operations.GetPushOperationRequest, retries: Op hook_ctx = HookContext(operation_id='get-push-operation', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetPushOperationRequest, base_url, '/companies/{companyId}/push/{pushOperationKey}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/push/{pushOperationKey}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -130,26 +132,26 @@ def get_operation(self, request: operations.GetPushOperationRequest, retries: Op else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -159,25 +161,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetPushOperationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetPushOperationResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.PushOperation]) res.push_operation = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -190,17 +194,17 @@ def list_operations(self, request: operations.GetCompanyPushHistoryRequest, retr hook_ctx = HookContext(operation_id='get-company-push-history', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetCompanyPushHistoryRequest, base_url, '/companies/{companyId}/push', request) - headers = {} - query_params = utils.get_query_params(operations.GetCompanyPushHistoryRequest, request) - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/push', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -210,26 +214,26 @@ def list_operations(self, request: operations.GetCompanyPushHistoryRequest, retr else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, params=query_params, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -239,26 +243,29 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetCompanyPushHistoryResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetCompanyPushHistoryResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.PushOperations]) res.push_operations = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/refresh_data.py b/platform/src/codatplatform/refresh_data.py index 4fe3de7e8..f54121ea9 100644 --- a/platform/src/codatplatform/refresh_data.py +++ b/platform/src/codatplatform/refresh_data.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared -from typing import Dict, Optional +from typing import Optional class RefreshData: - r"""Asynchronously retrieve data from an integration to refresh data in Codat.""" + r"""Initiate data refreshes, view pull status and history.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -27,16 +27,16 @@ def all(self, request: operations.RefreshCompanyDataRequest, retries: Optional[u hook_ctx = HookContext(operation_id='refresh-company-data', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.RefreshCompanyDataRequest, base_url, '/companies/{companyId}/data/all', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/data/all', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -46,26 +46,26 @@ def all(self, request: operations.RefreshCompanyDataRequest, retries: Optional[u else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -75,21 +75,22 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.RefreshCompanyDataResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.RefreshCompanyDataResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 204: pass elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -104,17 +105,17 @@ def by_data_type(self, request: operations.RefreshDataTypeRequest, retries: Opti hook_ctx = HookContext(operation_id='refresh-data-type', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.RefreshDataTypeRequest, base_url, '/companies/{companyId}/data/queue/{dataType}', request) - headers = {} - query_params = utils.get_query_params(operations.RefreshDataTypeRequest, request) - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/data/queue/{dataType}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -124,26 +125,26 @@ def by_data_type(self, request: operations.RefreshDataTypeRequest, retries: Opti else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, params=query_params, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -153,25 +154,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.RefreshDataTypeResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.RefreshDataTypeResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.PullOperation]) res.pull_operation = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -184,16 +187,16 @@ def get(self, request: operations.GetCompanyDataStatusRequest, retries: Optional hook_ctx = HookContext(operation_id='get-company-data-status', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetCompanyDataStatusRequest, base_url, '/companies/{companyId}/dataStatus', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/dataStatus', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -203,26 +206,26 @@ def get(self, request: operations.GetCompanyDataStatusRequest, retries: Optional else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -232,25 +235,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetCompanyDataStatusResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetCompanyDataStatusResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): - out = utils.unmarshal_json(http_res.text, Optional[Dict[str, shared.DataStatus]]) + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.DataStatuses]) res.data_statuses = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -263,16 +268,16 @@ def get_pull_operation(self, request: operations.GetPullOperationRequest, retrie hook_ctx = HookContext(operation_id='get-pull-operation', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetPullOperationRequest, base_url, '/companies/{companyId}/data/history/{datasetId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/data/history/{datasetId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -282,26 +287,26 @@ def get_pull_operation(self, request: operations.GetPullOperationRequest, retrie else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -311,25 +316,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetPullOperationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetPullOperationResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.PullOperation]) res.pull_operation = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -342,17 +349,17 @@ def list_pull_operations(self, request: operations.ListPullOperationsRequest, re hook_ctx = HookContext(operation_id='list-pull-operations', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.ListPullOperationsRequest, base_url, '/companies/{companyId}/data/history', request) - headers = {} - query_params = utils.get_query_params(operations.ListPullOperationsRequest, request) - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/companies/{companyId}/data/history', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -362,26 +369,26 @@ def list_pull_operations(self, request: operations.ListPullOperationsRequest, re else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, params=query_params, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -391,26 +398,29 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListPullOperationsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListPullOperationsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.PullOperations]) res.pull_operations = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/sdk.py b/platform/src/codatplatform/sdk.py index 35eb7c598..ac2f948cc 100644 --- a/platform/src/codatplatform/sdk.py +++ b/platform/src/codatplatform/sdk.py @@ -2,6 +2,7 @@ import requests as requests_http from .companies import Companies +from .connection_management import ConnectionManagement from .connections import Connections from .custom_data_type import CustomDataType from .groups import Groups @@ -11,11 +12,12 @@ from .sdkconfiguration import SDKConfiguration from .settings import Settings from .supplemental_data import SupplementalData +from .utils.retries import RetryConfig from .webhooks import Webhooks from codatplatform import utils from codatplatform._hooks import SDKHooks from codatplatform.models import shared -from typing import Callable, Dict, Union +from typing import Callable, Dict, Optional, Union class CodatPlatform: r"""Platform API: Platform API @@ -23,43 +25,62 @@ class CodatPlatform: These end points cover creating and managing your companies, data connections, and integrations. - [Read about the building blocks of Codat...](https://docs.codat.io/core-concepts/companies) + [Read about the building blocks of Codat...](https://docs.codat.io/core-concepts/companies) | [See our OpenAPI spec](https://github.com/codatio/oas) - [See our OpenAPI spec](https://github.com/codatio/oas) + --- + + ## Endpoints + + | Endpoints | Description | + | :- |:- | + | Companies | Create and manage your SMB users' companies. | + | Connections | Create new and manage existing data connections for a company. | + | Connection management | Configure connection management UI and retrieve access tokens for authentication. | + | Groups | Define and manage sets of companies based on a chosen characteristic. | + | Webhooks | Create and manage webhooks that listen to Codat's events. | + | Integrations | Get a list of integrations supported by Codat and their logos. | + | Refresh data | Initiate data refreshes, view pull status and history. | + | Settings | Manage company profile configuration, sync settings, and API keys. | + | Push data | Initiate and monitor Create, Update, and Delete operations. | + | Supplemental data | Configure and pull additional data you can include in Codat's standard data types. | + | Custom data type | Configure and pull additional data types that are not included in Codat's standardized data model. | + """ settings: Settings - r"""Manage your Codat instance.""" + r"""Manage company profile configuration, sync settings, and API keys.""" companies: Companies - r"""Create and manage your Codat companies.""" + r"""Create and manage your SMB users' companies.""" + connection_management: ConnectionManagement + r"""Configure connection management UI and retrieve access tokens for authentication.""" connections: Connections - r"""Manage your companies' data connections.""" + r"""Create new and manage existing data connections for a company.""" custom_data_type: CustomDataType - r"""View and configure custom data types for supported integrations.""" + r"""Configure and pull additional data types that are not included in Codat's standardized data model.""" push_data: PushData - r"""View push options and get push statuses.""" + r"""Initiate and monitor Create, Update, and Delete operations.""" refresh_data: RefreshData - r"""Asynchronously retrieve data from an integration to refresh data in Codat.""" + r"""Initiate data refreshes, view pull status and history.""" groups: Groups - r"""Create groups and link them to your Codat companies.""" + r"""Define and manage sets of companies based on a chosen characteristic.""" integrations: Integrations - r"""View and manage your available integrations in Codat.""" + r"""Get a list of integrations supported by Codat and their logos.""" supplemental_data: SupplementalData - r"""View and configure supplemental data for supported data types.""" + r"""Configure and pull additional data you can include in Codat's standard data types.""" webhooks: Webhooks - r"""Manage webhooks, rules, and events.""" + r"""Create and manage webhooks that listen to Codat's events.""" sdk_configuration: SDKConfiguration def __init__(self, security: Union[shared.Security,Callable[[], shared.Security]] = None, - server_idx: int = None, - server_url: str = None, - url_params: Dict[str, str] = None, - client: requests_http.Session = None, - retry_config: utils.RetryConfig = None + server_idx: Optional[int] = None, + server_url: Optional[str] = None, + url_params: Optional[Dict[str, str]] = None, + client: Optional[requests_http.Session] = None, + retry_config: Optional[RetryConfig] = None ) -> None: """Instantiates the SDK configuring it with the provided parameters. - + :param security: The security details required for authentication :type security: Union[shared.Security,Callable[[], shared.Security]] :param server_idx: The index of the server to use for all operations @@ -71,16 +92,23 @@ def __init__(self, :param client: The requests.Session HTTP client to use for all operations :type client: requests_http.Session :param retry_config: The utils.RetryConfig to use globally - :type retry_config: utils.RetryConfig + :type retry_config: RetryConfig """ if client is None: client = requests_http.Session() - + if server_url is not None: if url_params is not None: server_url = utils.template_url(server_url, url_params) + - self.sdk_configuration = SDKConfiguration(client, security, server_url, server_idx, retry_config=retry_config) + self.sdk_configuration = SDKConfiguration( + client, + security, + server_url, + server_idx, + retry_config=retry_config + ) hooks = SDKHooks() @@ -90,13 +118,15 @@ def __init__(self, self.sdk_configuration.server_url = server_url # pylint: disable=protected-access - self.sdk_configuration._hooks=hooks - + self.sdk_configuration.__dict__['_hooks'] = hooks + self._init_sdks() - + + def _init_sdks(self): self.settings = Settings(self.sdk_configuration) self.companies = Companies(self.sdk_configuration) + self.connection_management = ConnectionManagement(self.sdk_configuration) self.connections = Connections(self.sdk_configuration) self.custom_data_type = CustomDataType(self.sdk_configuration) self.push_data = PushData(self.sdk_configuration) @@ -105,4 +135,3 @@ def _init_sdks(self): self.integrations = Integrations(self.sdk_configuration) self.supplemental_data = SupplementalData(self.sdk_configuration) self.webhooks = Webhooks(self.sdk_configuration) - \ No newline at end of file diff --git a/platform/src/codatplatform/sdkconfiguration.py b/platform/src/codatplatform/sdkconfiguration.py index 6d23b9f6b..a1e20729c 100644 --- a/platform/src/codatplatform/sdkconfiguration.py +++ b/platform/src/codatplatform/sdkconfiguration.py @@ -7,7 +7,7 @@ from .utils.retries import RetryConfig from codatplatform.models import shared from dataclasses import dataclass -from typing import Callable, Dict, Tuple, Union +from typing import Callable, Dict, Optional, Tuple, Union SERVERS = [ @@ -20,18 +20,20 @@ class SDKConfiguration: client: requests_http.Session security: Union[shared.Security,Callable[[], shared.Security]] = None - server_url: str = '' - server_idx: int = 0 + server_url: Optional[str] = '' + server_idx: Optional[int] = 0 language: str = 'python' openapi_doc_version: str = '3.0.0' - sdk_version: str = '3.4.0' - gen_version: str = '2.277.0' - user_agent: str = 'speakeasy-sdk/python 3.4.0 2.277.0 3.0.0 codat-platform' - retry_config: RetryConfig = None - _hooks: SDKHooks = None + sdk_version: str = '3.5.0' + gen_version: str = '2.314.0' + user_agent: str = 'speakeasy-sdk/python 3.5.0 2.314.0 3.0.0 codat-platform' + retry_config: Optional[RetryConfig] = None + + def __post_init__(self): + self._hooks = SDKHooks() def get_server_details(self) -> Tuple[str, Dict[str, str]]: - if self.server_url: + if self.server_url is not None and self.server_url != '': return utils.remove_suffix(self.server_url, '/'), {} if self.server_idx is None: self.server_idx = 0 diff --git a/platform/src/codatplatform/settings.py b/platform/src/codatplatform/settings.py index ac54c0586..8fdc931db 100644 --- a/platform/src/codatplatform/settings.py +++ b/platform/src/codatplatform/settings.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class Settings: - r"""Manage your Codat instance.""" + r"""Manage company profile configuration, sync settings, and API keys.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -34,18 +34,18 @@ def create_api_key(self, request: Optional[shared.CreateAPIKey], retries: Option base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/apiKeys' - headers = {} + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, Optional[shared.CreateAPIKey], "request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -55,26 +55,26 @@ def create_api_key(self, request: Optional[shared.CreateAPIKey], retries: Option else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','409','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -84,25 +84,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.CreateAPIKeyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.CreateAPIKeyResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 201: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.APIKeyDetails]) res.api_key_details = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 409, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -124,16 +126,16 @@ def delete_api_key(self, request: operations.DeleteAPIKeyRequest, retries: Optio hook_ctx = HookContext(operation_id='delete-api-key', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.DeleteAPIKeyRequest, base_url, '/apiKeys/{apiKeyId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/apiKeys/{apiKeyId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -143,26 +145,26 @@ def delete_api_key(self, request: operations.DeleteAPIKeyRequest, retries: Optio else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('DELETE', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('DELETE', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -172,25 +174,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.DeleteAPIKeyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.DeleteAPIKeyResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 204: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[errors.ErrorMessage]) res.error_message = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -204,15 +208,15 @@ def get_profile(self, retries: Optional[utils.RetryConfig] = None) -> operations base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/profile' - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -222,26 +226,26 @@ def get_profile(self, retries: Optional[utils.RetryConfig] = None) -> operations else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -251,25 +255,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetProfileResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetProfileResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Profile]) res.profile = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -283,15 +289,15 @@ def get_sync_settings(self, retries: Optional[utils.RetryConfig] = None) -> oper base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/profile/syncSettings' - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -301,26 +307,26 @@ def get_sync_settings(self, retries: Optional[utils.RetryConfig] = None) -> oper else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -330,25 +336,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetProfileSyncSettingsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetProfileSyncSettingsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.SyncSettings]) res.sync_settings = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -366,15 +374,15 @@ def list_api_keys(self, retries: Optional[utils.RetryConfig] = None) -> operatio base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/apiKeys' - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -384,26 +392,26 @@ def list_api_keys(self, retries: Optional[utils.RetryConfig] = None) -> operatio else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -413,25 +421,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListAPIKeysResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListAPIKeysResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.APIKeys]) res.api_keys = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -445,18 +455,18 @@ def update_profile(self, request: Optional[shared.Profile], retries: Optional[ut base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/profile' - headers = {} + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, Optional[shared.Profile], "request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -466,26 +476,26 @@ def update_profile(self, request: Optional[shared.Profile], retries: Optional[ut else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('PUT', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('PUT', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -495,25 +505,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.UpdateProfileResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.UpdateProfileResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Profile]) res.profile = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -527,18 +539,18 @@ def update_sync_settings(self, request: Optional[operations.UpdateProfileSyncSet base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/profile/syncSettings' - headers = {} + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, Optional[operations.UpdateProfileSyncSettingsRequestBody], "request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -548,26 +560,26 @@ def update_sync_settings(self, request: Optional[operations.UpdateProfileSyncSet else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -577,22 +589,24 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.UpdateProfileSyncSettingsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.UpdateProfileSyncSettingsResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 204: pass elif http_res.status_code in [401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/supplemental_data.py b/platform/src/codatplatform/supplemental_data.py index 10f7866f3..5d7c16a67 100644 --- a/platform/src/codatplatform/supplemental_data.py +++ b/platform/src/codatplatform/supplemental_data.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class SupplementalData: - r"""View and configure supplemental data for supported data types.""" + r"""Configure and pull additional data you can include in Codat's standard data types.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -28,19 +28,19 @@ def configure(self, request: operations.ConfigureSupplementalDataRequest, retrie hook_ctx = HookContext(operation_id='configure-supplemental-data', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.ConfigureSupplementalDataRequest, base_url, '/integrations/{platformKey}/dataTypes/{dataType}/supplementalDataConfig', request) - headers = {} + url = utils.generate_url(base_url, '/integrations/{platformKey}/dataTypes/{dataType}/supplementalDataConfig', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, operations.ConfigureSupplementalDataRequest, "supplemental_data_configuration", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -50,26 +50,26 @@ def configure(self, request: operations.ConfigureSupplementalDataRequest, retrie else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('PUT', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('PUT', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -79,21 +79,22 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ConfigureSupplementalDataResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ConfigureSupplementalDataResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: pass elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -108,16 +109,16 @@ def get_configuration(self, request: operations.GetSupplementalDataConfiguration hook_ctx = HookContext(operation_id='get-supplemental-data-configuration', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetSupplementalDataConfigurationRequest, base_url, '/integrations/{platformKey}/dataTypes/{dataType}/supplementalDataConfig', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/integrations/{platformKey}/dataTypes/{dataType}/supplementalDataConfig', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -127,26 +128,26 @@ def get_configuration(self, request: operations.GetSupplementalDataConfiguration else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -156,26 +157,29 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetSupplementalDataConfigurationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetSupplementalDataConfigurationResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.SupplementalDataConfiguration]) res.supplemental_data_configuration = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + + diff --git a/platform/src/codatplatform/utils/retries.py b/platform/src/codatplatform/utils/retries.py index 8eba09407..c40fc413c 100644 --- a/platform/src/codatplatform/utils/retries.py +++ b/platform/src/codatplatform/utils/retries.py @@ -75,12 +75,12 @@ def do_request(): if res.status_code == parsed_code: raise TemporaryError(res) except requests.exceptions.ConnectionError as exception: - if retries.config.config.retry_connection_errors: + if retries.config.retry_connection_errors: raise raise PermanentError(exception) from exception except requests.exceptions.Timeout as exception: - if retries.config.config.retry_connection_errors: + if retries.config.retry_connection_errors: raise raise PermanentError(exception) from exception @@ -114,7 +114,6 @@ def retry_with_backoff(func, initial_interval=500, max_interval=60000, exponent= raise sleep = ((initial_interval/1000) * exponent**retries + random.uniform(0, 1)) - if sleep > max_interval/1000: - sleep = max_interval/1000 + sleep = min(sleep, max_interval / 1000) time.sleep(sleep) retries += 1 diff --git a/platform/src/codatplatform/utils/utils.py b/platform/src/codatplatform/utils/utils.py index 691091c81..47e2c3042 100644 --- a/platform/src/codatplatform/utils/utils.py +++ b/platform/src/codatplatform/utils/utils.py @@ -4,40 +4,34 @@ import json import re import sys -from dataclasses import Field, dataclass, fields, is_dataclass, make_dataclass +from dataclasses import Field, fields, is_dataclass, make_dataclass from datetime import date, datetime from decimal import Decimal from email.message import Message from enum import Enum -from typing import (Any, Callable, Dict, List, Optional, Tuple, Union, - get_args, get_origin) +from typing import ( + Any, + Callable, + Dict, + List, + Optional, + Tuple, + Union, + get_args, + get_origin, +) from xmlrpc.client import boolean from typing_inspect import is_optional_type import dateutil.parser -import requests from dataclasses_json import DataClassJsonMixin -class SecurityClient: - client: requests.Session - query_params: Dict[str, str] = {} +def get_security(security: Any) -> Tuple[Dict[str, str], Dict[str, str]]: headers: Dict[str, str] = {} - - def __init__(self, client: requests.Session): - self.client = client - - def send(self, request: requests.PreparedRequest, **kwargs): - request.prepare_url(url=request.url, params=self.query_params) - request.headers.update(self.headers) - - return self.client.send(request, **kwargs) - - -def configure_security_client(client: requests.Session, security: dataclass): - client = SecurityClient(client) + query_params: Dict[str, str] = {} if security is None: - return client + return headers, query_params sec_fields: Tuple[Field, ...] = fields(security) for sec_field in sec_fields: @@ -45,188 +39,233 @@ def configure_security_client(client: requests.Session, security: dataclass): if value is None: continue - metadata = sec_field.metadata.get('security') + metadata = sec_field.metadata.get("security") if metadata is None: continue - if metadata.get('option'): - _parse_security_option(client, value) - return client - if metadata.get('scheme'): + if metadata.get("option"): + _parse_security_option(headers, query_params, value) + return headers, query_params + if metadata.get("scheme"): # Special case for basic auth which could be a flattened struct if metadata.get("sub_type") == "basic" and not is_dataclass(value): - _parse_security_scheme(client, metadata, security) + _parse_security_scheme(headers, query_params, metadata, security) else: - _parse_security_scheme(client, metadata, value) + _parse_security_scheme(headers, query_params, metadata, value) - return client + return headers, query_params -def _parse_security_option(client: SecurityClient, option: dataclass): +def _parse_security_option( + headers: Dict[str, str], query_params: Dict[str, str], option: Any +): opt_fields: Tuple[Field, ...] = fields(option) for opt_field in opt_fields: - metadata = opt_field.metadata.get('security') - if metadata is None or metadata.get('scheme') is None: + metadata = opt_field.metadata.get("security") + if metadata is None or metadata.get("scheme") is None: continue _parse_security_scheme( - client, metadata, getattr(option, opt_field.name)) + headers, query_params, metadata, getattr(option, opt_field.name) + ) -def _parse_security_scheme(client: SecurityClient, scheme_metadata: Dict, scheme: any): - scheme_type = scheme_metadata.get('type') - sub_type = scheme_metadata.get('sub_type') +def _parse_security_scheme( + headers: Dict[str, str], + query_params: Dict[str, str], + scheme_metadata: Dict, + scheme: Any, +): + scheme_type = scheme_metadata.get("type") + sub_type = scheme_metadata.get("sub_type") if is_dataclass(scheme): - if scheme_type == 'http' and sub_type == 'basic': - _parse_basic_auth_scheme(client, scheme) + if scheme_type == "http" and sub_type == "basic": + _parse_basic_auth_scheme(headers, scheme) return scheme_fields: Tuple[Field, ...] = fields(scheme) for scheme_field in scheme_fields: - metadata = scheme_field.metadata.get('security') - if metadata is None or metadata.get('field_name') is None: + metadata = scheme_field.metadata.get("security") + if metadata is None or metadata.get("field_name") is None: continue value = getattr(scheme, scheme_field.name) _parse_security_scheme_value( - client, scheme_metadata, metadata, value) + headers, query_params, scheme_metadata, metadata, value + ) else: _parse_security_scheme_value( - client, scheme_metadata, scheme_metadata, scheme) + headers, query_params, scheme_metadata, scheme_metadata, scheme + ) -def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: Dict, security_metadata: Dict, value: any): - scheme_type = scheme_metadata.get('type') - sub_type = scheme_metadata.get('sub_type') +def _parse_security_scheme_value( + headers: Dict[str, str], + query_params: Dict[str, str], + scheme_metadata: Dict, + security_metadata: Dict, + value: Any, +): + scheme_type = scheme_metadata.get("type") + sub_type = scheme_metadata.get("sub_type") - header_name = security_metadata.get('field_name') + header_name = str(security_metadata.get("field_name")) if scheme_type == "apiKey": - if sub_type == 'header': - client.headers[header_name] = value - elif sub_type == 'query': - client.query_params[header_name] = value + if sub_type == "header": + headers[header_name] = value + elif sub_type == "query": + query_params[header_name] = value else: - raise Exception('not supported') + raise Exception("not supported") elif scheme_type == "openIdConnect": - client.headers[header_name] = _apply_bearer(value) - elif scheme_type == 'oauth2': - if sub_type != 'client_credentials': - client.headers[header_name] = _apply_bearer(value) - elif scheme_type == 'http': - if sub_type == 'bearer': - client.headers[header_name] = _apply_bearer(value) + headers[header_name] = _apply_bearer(value) + elif scheme_type == "oauth2": + if sub_type != "client_credentials": + headers[header_name] = _apply_bearer(value) + elif scheme_type == "http": + if sub_type == "bearer": + headers[header_name] = _apply_bearer(value) else: - raise Exception('not supported') + raise Exception("not supported") else: - raise Exception('not supported') + raise Exception("not supported") def _apply_bearer(token: str) -> str: - return token.lower().startswith('bearer ') and token or f'Bearer {token}' + return token.lower().startswith("bearer ") and token or f"Bearer {token}" -def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass): +def _parse_basic_auth_scheme(headers: Dict[str, str], scheme: Any): username = "" password = "" scheme_fields: Tuple[Field, ...] = fields(scheme) for scheme_field in scheme_fields: - metadata = scheme_field.metadata.get('security') - if metadata is None or metadata.get('field_name') is None: + metadata = scheme_field.metadata.get("security") + if metadata is None or metadata.get("field_name") is None: continue - field_name = metadata.get('field_name') + field_name = metadata.get("field_name") value = getattr(scheme, scheme_field.name) - if field_name == 'username': + if field_name == "username": username = value - if field_name == 'password': + if field_name == "password": password = value - data = f'{username}:{password}'.encode() - client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}' + data = f"{username}:{password}".encode() + headers["Authorization"] = f"Basic {base64.b64encode(data).decode()}" + + +def generate_url( + server_url: str, + path: str, + path_params: Any, + gbls: Optional[Any] = None, +) -> str: + path_param_values: Dict[str, str] = {} + + globals_already_populated = _populate_path_params( + path_params, gbls, path_param_values, [] + ) + if gbls is not None: + _populate_path_params(gbls, None, path_param_values, globals_already_populated) + + for key, value in path_param_values.items(): + path = path.replace("{" + key + "}", value, 1) + + return remove_suffix(server_url, "/") + path + +def _populate_path_params( + path_params: Any, + gbls: Any, + path_param_values: Dict[str, str], + skip_fields: List[str], +) -> List[str]: + globals_already_populated: List[str] = [] -def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, - gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> str: - path_param_fields: Tuple[Field, ...] = fields(clazz) + path_param_fields: Tuple[Field, ...] = fields(path_params) for field in path_param_fields: - request_metadata = field.metadata.get('request') - if request_metadata is not None: + if field.name in skip_fields: continue - param_metadata = field.metadata.get('path_param') + param_metadata = field.metadata.get("path_param") if param_metadata is None: continue - param = getattr( - path_params, field.name) if path_params is not None else None - param = _populate_from_globals( - field.name, param, 'pathParam', gbls) + param = getattr(path_params, field.name) if path_params is not None else None + param, global_found = _populate_from_globals( + field.name, param, "path_param", gbls + ) + if global_found: + globals_already_populated.append(field.name) if param is None: continue f_name = param_metadata.get("field_name", field.name) - serialization = param_metadata.get('serialization', '') - if serialization != '': + serialization = param_metadata.get("serialization", "") + if serialization != "": serialized_params = _get_serialized_params( - param_metadata, field.type, f_name, param) + param_metadata, field.type, f_name, param + ) for key, value in serialized_params.items(): - path = path.replace( - '{' + key + '}', value, 1) + path_param_values[key] = value else: - if param_metadata.get('style', 'simple') == 'simple': + if param_metadata.get("style", "simple") == "simple": if isinstance(param, List): pp_vals: List[str] = [] for pp_val in param: if pp_val is None: continue pp_vals.append(_val_to_string(pp_val)) - path = path.replace( - '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + path_param_values[param_metadata.get("field_name", field.name)] = ( + ",".join(pp_vals) + ) elif isinstance(param, Dict): pp_vals: List[str] = [] for pp_key in param: if param[pp_key] is None: continue - if param_metadata.get('explode'): - pp_vals.append( - f"{pp_key}={_val_to_string(param[pp_key])}") + if param_metadata.get("explode"): + pp_vals.append(f"{pp_key}={_val_to_string(param[pp_key])}") else: - pp_vals.append( - f"{pp_key},{_val_to_string(param[pp_key])}") - path = path.replace( - '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + pp_vals.append(f"{pp_key},{_val_to_string(param[pp_key])}") + path_param_values[param_metadata.get("field_name", field.name)] = ( + ",".join(pp_vals) + ) elif not isinstance(param, (str, int, float, complex, bool, Decimal)): pp_vals: List[str] = [] param_fields: Tuple[Field, ...] = fields(param) for param_field in param_fields: - param_value_metadata = param_field.metadata.get( - 'path_param') + param_value_metadata = param_field.metadata.get("path_param") if not param_value_metadata: continue - parm_name = param_value_metadata.get( - 'field_name', field.name) + param_name = param_value_metadata.get("field_name", field.name) param_field_val = getattr(param, param_field.name) if param_field_val is None: continue - if param_metadata.get('explode'): + if param_metadata.get("explode"): pp_vals.append( - f"{parm_name}={_val_to_string(param_field_val)}") + f"{param_name}={_val_to_string(param_field_val)}" + ) else: pp_vals.append( - f"{parm_name},{_val_to_string(param_field_val)}") - path = path.replace( - '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + f"{param_name},{_val_to_string(param_field_val)}" + ) + path_param_values[param_metadata.get("field_name", field.name)] = ( + ",".join(pp_vals) + ) else: - path = path.replace( - '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1) + path_param_values[param_metadata.get("field_name", field.name)] = ( + _val_to_string(param) + ) - return remove_suffix(server_url, '/') + path + return globals_already_populated def is_optional(field): @@ -235,100 +274,145 @@ def is_optional(field): def template_url(url_with_params: str, params: Dict[str, str]) -> str: for key, value in params.items(): - url_with_params = url_with_params.replace( - '{' + key + '}', value) + url_with_params = url_with_params.replace("{" + key + "}", value) return url_with_params -def get_query_params(clazz: type, query_params: dataclass, gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> Dict[ - str, List[str]]: +def get_query_params( + query_params: Any, + gbls: Optional[Any] = None, +) -> Dict[str, List[str]]: params: Dict[str, List[str]] = {} - param_fields: Tuple[Field, ...] = fields(clazz) + globals_already_populated = _populate_query_params(query_params, gbls, params, []) + if gbls is not None: + _populate_query_params(gbls, None, params, globals_already_populated) + + return params + + +def _populate_query_params( + query_params: Any, + gbls: Any, + query_param_values: Dict[str, List[str]], + skip_fields: List[str], +) -> List[str]: + globals_already_populated: List[str] = [] + + param_fields: Tuple[Field, ...] = fields(query_params) for field in param_fields: - request_metadata = field.metadata.get('request') - if request_metadata is not None: + if field.name in skip_fields: continue - metadata = field.metadata.get('query_param') + metadata = field.metadata.get("query_param") if not metadata: continue param_name = field.name - value = getattr( - query_params, param_name) if query_params is not None else None + value = getattr(query_params, param_name) if query_params is not None else None - value = _populate_from_globals(param_name, value, 'queryParam', gbls) + value, global_found = _populate_from_globals( + param_name, value, "query_param", gbls + ) + if global_found: + globals_already_populated.append(param_name) f_name = metadata.get("field_name") - serialization = metadata.get('serialization', '') - if serialization != '': + serialization = metadata.get("serialization", "") + if serialization != "": serialized_parms = _get_serialized_params( - metadata, field.type, f_name, value) + metadata, field.type, f_name, value + ) for key, value in serialized_parms.items(): - if key in params: - params[key].extend(value) + if key in query_param_values: + query_param_values[key].extend(value) else: - params[key] = [value] + query_param_values[key] = [value] else: - style = metadata.get('style', 'form') - if style == 'deepObject': - params = {**params, **_get_deep_object_query_params( - metadata, f_name, value)} - elif style == 'form': - params = {**params, **_get_delimited_query_params( - metadata, f_name, value, ",")} - elif style == 'pipeDelimited': - params = {**params, **_get_delimited_query_params( - metadata, f_name, value, "|")} + style = metadata.get("style", "form") + if style == "deepObject": + _populate_deep_object_query_params( + metadata, f_name, value, query_param_values + ) + elif style == "form": + _populate_delimited_query_params( + metadata, f_name, value, ",", query_param_values + ) + elif style == "pipeDelimited": + _populate_delimited_query_params( + metadata, f_name, value, "|", query_param_values + ) else: - raise Exception('not yet implemented') - return params + raise Exception("not yet implemented") + return globals_already_populated -def get_headers(headers_params: dataclass) -> Dict[str, str]: - if headers_params is None: - return {} +def get_headers(headers_params: Any, gbls: Optional[Any] = None) -> Dict[str, str]: headers: Dict[str, str] = {} + globals_already_populated = [] + if headers_params is not None: + globals_already_populated = _populate_headers(headers_params, gbls, headers, []) + if gbls is not None: + _populate_headers(gbls, None, headers, globals_already_populated) + + return headers + + +def _populate_headers( + headers_params: Any, + gbls: Any, + header_values: Dict[str, str], + skip_fields: List[str], +) -> List[str]: + globals_already_populated: List[str] = [] + param_fields: Tuple[Field, ...] = fields(headers_params) for field in param_fields: - metadata = field.metadata.get('header') + if field.name in skip_fields: + continue + + metadata = field.metadata.get("header") if not metadata: continue - value = _serialize_header(metadata.get( - 'explode', False), getattr(headers_params, field.name)) + value, global_found = _populate_from_globals( + field.name, getattr(headers_params, field.name), "header", gbls + ) + if global_found: + globals_already_populated.append(field.name) + value = _serialize_header(metadata.get("explode", False), value) - if value != '': - headers[metadata.get('field_name', field.name)] = value + if value != "": + header_values[metadata.get("field_name", field.name)] = value - return headers + return globals_already_populated -def _get_serialized_params(metadata: Dict, field_type: type, field_name: str, obj: any) -> Dict[str, str]: +def _get_serialized_params( + metadata: Dict, field_type: type, field_name: str, obj: Any +) -> Dict[str, str]: params: Dict[str, str] = {} - serialization = metadata.get('serialization', '') - if serialization == 'json': - params[metadata.get("field_name", field_name) - ] = marshal_json(obj, field_type) + serialization = metadata.get("serialization", "") + if serialization == "json": + params[metadata.get("field_name", field_name)] = marshal_json(obj, field_type) return params -def _get_deep_object_query_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, List[str]]: - params: Dict[str, List[str]] = {} - +def _populate_deep_object_query_params( + metadata: Dict, field_name: str, obj: Any, params: Dict[str, List[str]] +): if obj is None: - return params + return if is_dataclass(obj): obj_fields: Tuple[Field, ...] = fields(obj) for obj_field in obj_fields: - obj_param_metadata = obj_field.metadata.get('query_param') + obj_param_metadata = obj_field.metadata.get("query_param") if not obj_param_metadata: continue @@ -341,19 +425,23 @@ def _get_deep_object_query_params(metadata: Dict, field_name: str, obj: any) -> if val is None: continue - if params.get( - f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None: + if ( + params.get( + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]' + ) + is None + ): params[ - f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ - ] + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]' + ] = [] params[ - f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append( - _val_to_string(val)) + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]' + ].append(_val_to_string(val)) else: params[ - f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ - _val_to_string(obj_val)] + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]' + ] = [_val_to_string(obj_val)] elif isinstance(obj, Dict): for key, value in obj.items(): if value is None: @@ -364,20 +452,23 @@ def _get_deep_object_query_params(metadata: Dict, field_name: str, obj: any) -> if val is None: continue - if params.get(f'{metadata.get("field_name", field_name)}[{key}]') is None: - params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ - ] + if ( + params.get(f'{metadata.get("field_name", field_name)}[{key}]') + is None + ): + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [] - params[ - f'{metadata.get("field_name", field_name)}[{key}]'].append(_val_to_string(val)) + params[f'{metadata.get("field_name", field_name)}[{key}]'].append( + _val_to_string(val) + ) else: params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ - _val_to_string(value)] - return params + _val_to_string(value) + ] def _get_query_param_field_name(obj_field: Field) -> str: - obj_param_metadata = obj_field.metadata.get('query_param') + obj_param_metadata = obj_field.metadata.get("query_param") if not obj_param_metadata: return "" @@ -385,29 +476,53 @@ def _get_query_param_field_name(obj_field: Field) -> str: return obj_param_metadata.get("field_name", obj_field.name) -def _get_delimited_query_params(metadata: Dict, field_name: str, obj: any, delimiter: str) -> Dict[ - str, List[str]]: - return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name, delimiter) +def _populate_delimited_query_params( + metadata: Dict, + field_name: str, + obj: Any, + delimiter: str, + query_param_values: Dict[str, List[str]], +): + _populate_form( + field_name, + metadata.get("explode", True), + obj, + _get_query_param_field_name, + delimiter, + query_param_values, + ) SERIALIZATION_METHOD_TO_CONTENT_TYPE = { - 'json': 'application/json', - 'form': 'application/x-www-form-urlencoded', - 'multipart': 'multipart/form-data', - 'raw': 'application/octet-stream', - 'string': 'text/plain', + "json": "application/json", + "form": "application/x-www-form-urlencoded", + "multipart": "multipart/form-data", + "raw": "application/octet-stream", + "string": "text/plain", } -def serialize_request_body(request: dataclass, request_type: type, request_field_name: str, nullable: bool, optional: bool, serialization_method: str, encoder=None) -> Tuple[ - str, any, any]: +def serialize_request_body( + request: Any, + request_type: type, + request_field_name: str, + nullable: bool, + optional: bool, + serialization_method: str, + encoder=None, +) -> Tuple[Optional[str], Optional[Any], Optional[Any]]: if request is None: if not nullable and optional: return None, None, None if not is_dataclass(request) or not hasattr(request, request_field_name): - return serialize_content_type(request_field_name, request_type, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], - request, encoder) + return serialize_content_type( + request_field_name, + request_type, + SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], + request, + encoder, + ) request_val = getattr(request, request_field_name) @@ -420,22 +535,28 @@ def serialize_request_body(request: dataclass, request_type: type, request_field for field in request_fields: if field.name == request_field_name: - request_metadata = field.metadata.get('request') + request_metadata = field.metadata.get("request") break if request_metadata is None: - raise Exception('invalid request type') + raise Exception("invalid request type") - return serialize_content_type(request_field_name, request_type, request_metadata.get('media_type', 'application/octet-stream'), - request_val) + return serialize_content_type( + request_field_name, + request_type, + request_metadata.get("media_type", "application/octet-stream"), + request_val, + ) -def serialize_content_type(field_name: str, request_type: any, media_type: str, request: dataclass, encoder=None) -> Tuple[str, any, List[List[any]]]: - if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None: +def serialize_content_type( + field_name: str, request_type: Any, media_type: str, request: Any, encoder=None +) -> Tuple[Optional[str], Optional[Any], Optional[List[List[Any]]]]: + if re.match(r"(application|text)\/.*?\+*json.*", media_type) is not None: return media_type, marshal_json(request, request_type, encoder), None - if re.match(r'multipart\/.*', media_type) is not None: + if re.match(r"multipart\/.*", media_type) is not None: return serialize_multipart_form(media_type, request) - if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None: + if re.match(r"application\/x-www-form-urlencoded.*", media_type) is not None: return media_type, serialize_form_data(field_name, request), None if isinstance(request, (bytes, bytearray)): return media_type, request, None @@ -443,11 +564,14 @@ def serialize_content_type(field_name: str, request_type: any, media_type: str, return media_type, request, None raise Exception( - f"invalid request body type {type(request)} for mediaType {media_type}") + f"invalid request body type {type(request)} for mediaType {media_type}" + ) -def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, List[List[any]]]: - form: List[List[any]] = [] +def serialize_multipart_form( + media_type: str, request: Any +) -> Tuple[str, Any, List[List[Any]]]: + form: List[List[Any]] = [] request_fields = fields(request) for field in request_fields: @@ -455,7 +579,7 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, if val is None: continue - field_metadata = field.metadata.get('multipart_form') + field_metadata = field.metadata.get("multipart_form") if not field_metadata: continue @@ -467,42 +591,42 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, content = bytes() for file_field in file_fields: - file_metadata = file_field.metadata.get('multipart_form') + file_metadata = file_field.metadata.get("multipart_form") if file_metadata is None: continue if file_metadata.get("content") is True: content = getattr(val, file_field.name) else: - field_name = file_metadata.get( - "field_name", file_field.name) + field_name = file_metadata.get("field_name", file_field.name) file_name = getattr(val, file_field.name) if field_name == "" or file_name == "" or content == bytes(): - raise Exception('invalid multipart/form-data file') + raise Exception("invalid multipart/form-data file") form.append([field_name, [file_name, content]]) elif field_metadata.get("json") is True: - to_append = [field_metadata.get("field_name", field.name), [ - None, marshal_json(val, field.type), "application/json"]] + to_append = [ + field_metadata.get("field_name", field.name), + [None, marshal_json(val, field.type), "application/json"], + ] form.append(to_append) else: - field_name = field_metadata.get( - "field_name", field.name) + field_name = field_metadata.get("field_name", field.name) if isinstance(val, List): for value in val: if value is None: continue - form.append( - [field_name + "[]", [None, _val_to_string(value)]]) + form.append([field_name + "[]", [None, _val_to_string(value)]]) else: form.append([field_name, [None, _val_to_string(val)]]) return media_type, None, form -def serialize_dict(original: Dict, explode: bool, field_name, existing: Optional[Dict[str, List[str]]]) -> Dict[ - str, List[str]]: +def serialize_dict( + original: Dict, explode: bool, field_name, existing: Optional[Dict[str, List[str]]] +) -> Dict[str, List[str]]: if existing is None: - existing = [] + existing = {} if explode is True: for key, val in original.items(): @@ -520,7 +644,7 @@ def serialize_dict(original: Dict, explode: bool, field_name, existing: Optional return existing -def serialize_form_data(field_name: str, data: dataclass) -> Dict[str, any]: +def serialize_form_data(field_name: str, data: Any) -> Dict[str, Any]: form: Dict[str, List[str]] = {} if is_dataclass(data): @@ -529,32 +653,37 @@ def serialize_form_data(field_name: str, data: dataclass) -> Dict[str, any]: if val is None: continue - metadata = field.metadata.get('form') + metadata = field.metadata.get("form") if metadata is None: continue - field_name = metadata.get('field_name', field.name) + field_name = metadata.get("field_name", field.name) - if metadata.get('json'): + if metadata.get("json"): form[field_name] = [marshal_json(val, field.type)] else: - if metadata.get('style', 'form') == 'form': - form = {**form, **_populate_form( - field_name, metadata.get('explode', True), val, _get_form_field_name, ",")} + if metadata.get("style", "form") == "form": + _populate_form( + field_name, + metadata.get("explode", True), + val, + _get_form_field_name, + ",", + form, + ) else: - raise Exception( - f'Invalid form style for field {field.name}') + raise Exception(f"Invalid form style for field {field.name}") elif isinstance(data, Dict): for key, value in data.items(): form[key] = [_val_to_string(value)] else: - raise Exception(f'Invalid request body type for field {field_name}') + raise Exception(f"Invalid request body type for field {field_name}") return form def _get_form_field_name(obj_field: Field) -> str: - obj_param_metadata = obj_field.metadata.get('form') + obj_param_metadata = obj_field.metadata.get("form") if not obj_param_metadata: return "" @@ -562,12 +691,16 @@ def _get_form_field_name(obj_field: Field) -> str: return obj_param_metadata.get("field_name", obj_field.name) -def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable, delimiter: str) -> \ - Dict[str, List[str]]: - params: Dict[str, List[str]] = {} - +def _populate_form( + field_name: str, + explode: boolean, + obj: Any, + get_field_name_func: Callable, + delimiter: str, + form: Dict[str, List[str]], +): if obj is None: - return params + return form if is_dataclass(obj): items = [] @@ -575,7 +708,7 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f obj_fields: Tuple[Field, ...] = fields(obj) for obj_field in obj_fields: obj_field_name = get_field_name_func(obj_field) - if obj_field_name == '': + if obj_field_name == "": continue val = getattr(obj, obj_field.name) @@ -583,13 +716,12 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f continue if explode: - params[obj_field_name] = [_val_to_string(val)] + form[obj_field_name] = [_val_to_string(val)] else: - items.append( - f'{obj_field_name}{delimiter}{_val_to_string(val)}') + items.append(f"{obj_field_name}{delimiter}{_val_to_string(val)}") if len(items) > 0: - params[field_name] = [delimiter.join(items)] + form[field_name] = [delimiter.join(items)] elif isinstance(obj, Dict): items = [] for key, value in obj.items(): @@ -597,12 +729,12 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f continue if explode: - params[key] = _val_to_string(value) + form[key] = [_val_to_string(value)] else: - items.append(f'{key}{delimiter}{_val_to_string(value)}') + items.append(f"{key}{delimiter}{_val_to_string(value)}") if len(items) > 0: - params[field_name] = [delimiter.join(items)] + form[field_name] = [delimiter.join(items)] elif isinstance(obj, List): items = [] @@ -611,37 +743,35 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f continue if explode: - if not field_name in params: - params[field_name] = [] - params[field_name].append(_val_to_string(value)) + if not field_name in form: + form[field_name] = [] + form[field_name].append(_val_to_string(value)) else: items.append(_val_to_string(value)) if len(items) > 0: - params[field_name] = [delimiter.join( - [str(item) for item in items])] + form[field_name] = [delimiter.join([str(item) for item in items])] else: - params[field_name] = [_val_to_string(obj)] + form[field_name] = [_val_to_string(obj)] - return params + return form -def _serialize_header(explode: bool, obj: any) -> str: +def _serialize_header(explode: bool, obj: Any) -> str: if obj is None: - return '' + return "" if is_dataclass(obj): items = [] obj_fields: Tuple[Field, ...] = fields(obj) for obj_field in obj_fields: - obj_param_metadata = obj_field.metadata.get('header') + obj_param_metadata = obj_field.metadata.get("header") if not obj_param_metadata: continue - obj_field_name = obj_param_metadata.get( - 'field_name', obj_field.name) - if obj_field_name == '': + obj_field_name = obj_param_metadata.get("field_name", obj_field.name) + if obj_field_name == "": continue val = getattr(obj, obj_field.name) @@ -649,14 +779,13 @@ def _serialize_header(explode: bool, obj: any) -> str: continue if explode: - items.append( - f'{obj_field_name}={_val_to_string(val)}') + items.append(f"{obj_field_name}={_val_to_string(val)}") else: items.append(obj_field_name) items.append(_val_to_string(val)) if len(items) > 0: - return ','.join(items) + return ",".join(items) elif isinstance(obj, Dict): items = [] @@ -665,13 +794,13 @@ def _serialize_header(explode: bool, obj: any) -> str: continue if explode: - items.append(f'{key}={_val_to_string(value)}') + items.append(f"{key}={_val_to_string(value)}") else: items.append(key) items.append(_val_to_string(value)) if len(items) > 0: - return ','.join([str(item) for item in items]) + return ",".join([str(item) for item in items]) elif isinstance(obj, List): items = [] @@ -682,38 +811,36 @@ def _serialize_header(explode: bool, obj: any) -> str: items.append(_val_to_string(value)) if len(items) > 0: - return ','.join(items) + return ",".join(items) else: - return f'{_val_to_string(obj)}' + return f"{_val_to_string(obj)}" - return '' + return "" def unmarshal_json(data, typ, decoder=None): - unmarshal = make_dataclass('Unmarshal', [('res', typ)], - bases=(DataClassJsonMixin,)) + unmarshal = make_dataclass("Unmarshal", [("res", typ)], bases=(DataClassJsonMixin,)) json_dict = json.loads(data) try: out = unmarshal.from_dict({"res": json_dict}) except AttributeError as attr_err: raise AttributeError( - f'unable to unmarshal {data} as {typ} - {attr_err}') from attr_err + f"unable to unmarshal {data} as {typ} - {attr_err}" + ) from attr_err return out.res if decoder is None else decoder(out.res) def marshal_json(val, typ, encoder=None): if not is_optional_type(typ) and val is None: - raise ValueError( - f"Could not marshal None into non-optional type: {typ}") + raise ValueError(f"Could not marshal None into non-optional type: {typ}") - marshal = make_dataclass('Marshal', [('res', typ)], - bases=(DataClassJsonMixin,)) + marshal = make_dataclass("Marshal", [("res", typ)], bases=(DataClassJsonMixin,)) marshaller = marshal(res=val) json_dict = marshaller.to_dict() val = json_dict["res"] if encoder is None else encoder(json_dict["res"]) - return json.dumps(val, separators=(',', ':'), sort_keys=True) + return json.dumps(val, separators=(",", ":"), sort_keys=True) def match_content_type(content_type: str, pattern: str) -> boolean: @@ -721,7 +848,7 @@ def match_content_type(content_type: str, pattern: str) -> boolean: return True msg = Message() - msg['content-type'] = content_type + msg["content-type"] = content_type media_type = msg.get_content_type() if media_type == pattern: @@ -729,7 +856,7 @@ def match_content_type(content_type: str, pattern: str) -> boolean: parts = media_type.split("/") if len(parts) == 2: - if pattern in (f'{parts[0]}/*', f'*/{parts[1]}'): + if pattern in (f"{parts[0]}/*", f"*/{parts[1]}"): return True return False @@ -850,15 +977,16 @@ def list_decode(val: List): def union_encoder(all_encoders: Dict[str, Callable]): - def selective_encoder(val: any): + def selective_encoder(val: Any): if type(val) in all_encoders: return all_encoders[type(val)](val) return val + return selective_encoder def union_decoder(all_decoders: List[Callable]): - def selective_decoder(val: any): + def selective_decoder(val: Any): decoded = val for decoder in all_decoders: try: @@ -867,6 +995,7 @@ def selective_decoder(val: any): except (TypeError, ValueError): continue return decoded + return selective_decoder @@ -877,37 +1006,55 @@ def override(_, _field_name=name): return override -def _val_to_string(val): +def _val_to_string(val) -> str: if isinstance(val, bool): return str(val).lower() if isinstance(val, datetime): - return val.isoformat().replace('+00:00', 'Z') + return str(val.isoformat().replace("+00:00", "Z")) if isinstance(val, Enum): return str(val.value) return str(val) -def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: Dict[str, Dict[str, Dict[str, Any]]]): - if value is None and gbls is not None: - if 'parameters' in gbls: - if param_type in gbls['parameters']: - if param_name in gbls['parameters'][param_type]: - global_value = gbls['parameters'][param_type][param_name] - if global_value is not None: - value = global_value +def _populate_from_globals( + param_name: str, value: Any, param_type: str, gbls: Any +) -> Tuple[Any, bool]: + if gbls is None: + return value, False + + global_fields = fields(gbls) + + found = False + for field in global_fields: + if field.name is not param_name: + continue + + found = True + + if value is not None: + return value, True + + global_value = getattr(gbls, field.name) + + param_metadata = field.metadata.get(param_type) + if param_metadata is None: + return value, True + + return global_value, True - return value + return value, found def decoder_with_discriminator(field_name): def decode_fx(obj): - kls = getattr(sys.modules['sdk.models.shared'], obj[field_name]) + kls = getattr(sys.modules["sdk.models.shared"], obj[field_name]) return unmarshal_json(json.dumps(obj), kls) + return decode_fx def remove_suffix(input_string, suffix): if suffix and input_string.endswith(suffix): - return input_string[:-len(suffix)] + return input_string[: -len(suffix)] return input_string diff --git a/platform/src/codatplatform/webhooks.py b/platform/src/codatplatform/webhooks.py index 3043ae39d..6159fb86a 100644 --- a/platform/src/codatplatform/webhooks.py +++ b/platform/src/codatplatform/webhooks.py @@ -3,12 +3,12 @@ import requests as requests_http from .sdkconfiguration import SDKConfiguration from codatplatform import utils -from codatplatform._hooks import HookContext +from codatplatform._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from codatplatform.models import errors, operations, shared from typing import Optional class Webhooks: - r"""Manage webhooks, rules, and events.""" + r"""Create and manage webhooks that listen to Codat's events.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -26,18 +26,18 @@ def create(self, request: Optional[shared.CreateRule], retries: Optional[utils.R base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/rules' - headers = {} + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, Optional[shared.CreateRule], "request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -47,26 +47,26 @@ def create(self, request: Optional[shared.CreateRule], retries: Optional[utils.R else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -76,25 +76,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.CreateRuleResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.CreateRuleResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Webhook]) res.webhook = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -110,18 +112,18 @@ def create_consumer(self, request: Optional[shared.WebhookConsumerPrototype], re base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/webhooks' - headers = {} + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + req_content_type, data, form = utils.serialize_request_body(request, Optional[shared.WebhookConsumerPrototype], "request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent - - if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) - else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) - + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -131,26 +133,26 @@ def create_consumer(self, request: Optional[shared.WebhookConsumerPrototype], re else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('POST', url, data=data, files=form, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -160,25 +162,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.CreateWebhookConsumerResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.CreateWebhookConsumerResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 201: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.WebhookConsumer]) res.webhook_consumer = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -193,16 +197,16 @@ def delete_consumer(self, request: operations.DeleteWebhookConsumerRequest, retr hook_ctx = HookContext(operation_id='delete-webhook-consumer', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.DeleteWebhookConsumerRequest, base_url, '/webhooks/{webhookId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/webhooks/{webhookId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -212,26 +216,26 @@ def delete_consumer(self, request: operations.DeleteWebhookConsumerRequest, retr else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('DELETE', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('DELETE', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -241,21 +245,22 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.DeleteWebhookConsumerResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.DeleteWebhookConsumerResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 204: pass elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -270,16 +275,16 @@ def get(self, request: operations.GetWebhookRequest, retries: Optional[utils.Ret hook_ctx = HookContext(operation_id='get-webhook', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetWebhookRequest, base_url, '/rules/{ruleId}', request) - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent + url = utils.generate_url(base_url, '/rules/{ruleId}', request) if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -289,26 +294,26 @@ def get(self, request: operations.GetWebhookRequest, retries: Optional[utils.Ret else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -318,25 +323,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.GetWebhookResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.GetWebhookResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Webhook]) res.webhook = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -352,16 +359,16 @@ def list(self, request: operations.ListRulesRequest, retries: Optional[utils.Ret base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/rules' - headers = {} - query_params = utils.get_query_params(operations.ListRulesRequest, request) - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -371,26 +378,26 @@ def list(self, request: operations.ListRulesRequest, retries: Optional[utils.Ret else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, params=query_params, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','404','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -400,25 +407,27 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListRulesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListRulesResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.Webhooks]) res.webhooks = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 404, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res @@ -434,15 +443,15 @@ def list_consumers(self, retries: Optional[utils.RetryConfig] = None) -> operati base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/webhooks' - headers = {} - headers['Accept'] = 'application/json' - headers['user-agent'] = self.sdk_configuration.user_agent if callable(self.sdk_configuration.security): - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + headers, query_params = utils.get_security(self.sdk_configuration.security()) else: - client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + headers, query_params = utils.get_security(self.sdk_configuration.security) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client global_retry_config = self.sdk_configuration.retry_config retry_config = retries @@ -452,26 +461,26 @@ def list_consumers(self, retries: Optional[utils.RetryConfig] = None) -> operati else: retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + req = None def do_request(): + nonlocal req try: - req = self.sdk_configuration.get_hooks().before_request( - hook_ctx, - requests_http.Request('GET', url, headers=headers).prepare(), - ) + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, None, e) - raise e + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e if utils.match_status_codes(['400','401','402','403','429','4XX','500','503','5XX'], http_res.status_code): - http_res, e = self.sdk_configuration.get_hooks().after_error(hook_ctx, http_res, None) - if e: + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: raise e + if result is not None: + http_res = result else: - result = self.sdk_configuration.get_hooks().after_success(hook_ctx, http_res) - if isinstance(result, Exception): - raise result - http_res = result + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -481,26 +490,29 @@ def do_request(): '5XX' ])) - content_type = http_res.headers.get('Content-Type') - res = operations.ListWebhookConsumersResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + res = operations.ListWebhookConsumersResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[shared.WebhookConsumers]) res.webhook_consumers = out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code in [400, 401, 402, 403, 429, 500, 503]: - if utils.match_content_type(content_type, 'application/json'): + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, errors.ErrorMessage) - out.raw_response = http_res raise out else: + content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res - \ No newline at end of file + +