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
+
+