diff --git a/sync-for-commerce/README.md b/sync-for-commerce/README.md index 07dcd598c..c8f8f8cb7 100755 --- a/sync-for-commerce/README.md +++ b/sync-for-commerce/README.md @@ -3,15 +3,78 @@ Embedded accounting integrations for POS and eCommerce platforms. -replace me +## SDK Installation + +```bash +pip install codat-sync-for-commerce +``` ## Example Usage -replace me + + +```python +import codatsynccommerce +from codatsynccommerce.models import shared + +s = codatsynccommerce.CodatSyncCommerce( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = shared.CreateCompany( + description='Requested early access to the new financing scheme.', + name='Bank of Dave', +) + +res = s.advanced_controls.create_company(req) + +if res.company is not None: + # handle response +``` -replace me +## Available Resources and Operations + + +### [advanced_controls](docs/sdks/advancedcontrols/README.md) + +* [create_company](docs/sdks/advancedcontrols/README.md#create_company) - Create company +* [get_configuration](docs/sdks/advancedcontrols/README.md#get_configuration) - Get company configuration +* [list_companies](docs/sdks/advancedcontrols/README.md#list_companies) - List companies +* [set_configuration](docs/sdks/advancedcontrols/README.md#set_configuration) - Set configuration + +### [connections](docs/sdks/connections/README.md) + +* [create](docs/sdks/connections/README.md#create) - Create connection +* [get_sync_flow_url](docs/sdks/connections/README.md#get_sync_flow_url) - Start new sync flow +* [list](docs/sdks/connections/README.md#list) - List connections +* [update_authorization](docs/sdks/connections/README.md#update_authorization) - Update authorization +* [update_connection](docs/sdks/connections/README.md#update_connection) - Update connection + +### [integrations](docs/sdks/integrations/README.md) + +* [get_branding](docs/sdks/integrations/README.md#get_branding) - Get branding for an integration +* [list](docs/sdks/integrations/README.md#list) - List integrations + +### [sync](docs/sdks/sync/README.md) + +* [get](docs/sdks/sync/README.md#get) - Get sync status +* [get_last_successful_sync](docs/sdks/sync/README.md#get_last_successful_sync) - Last successful sync +* [get_latest_sync](docs/sdks/sync/README.md#get_latest_sync) - Latest sync status +* [get_status](docs/sdks/sync/README.md#get_status) - Get sync status +* [list](docs/sdks/sync/README.md#list) - List sync statuses +* [request](docs/sdks/sync/README.md#request) - Initiate new sync +* [request_for_date_range](docs/sdks/sync/README.md#request_for_date_range) - Initiate sync for specific range + +### [sync_flow_settings](docs/sdks/syncflowsettings/README.md) + +* [get_config_text_sync_flow](docs/sdks/syncflowsettings/README.md#get_config_text_sync_flow) - Get preferences for text fields +* [get_visible_accounts](docs/sdks/syncflowsettings/README.md#get_visible_accounts) - List visible accounts +* [update_config_text_sync_flow](docs/sdks/syncflowsettings/README.md#update_config_text_sync_flow) - Update preferences for text fields +* [update_visible_accounts_sync_flow](docs/sdks/syncflowsettings/README.md#update_visible_accounts_sync_flow) - Update visible accounts ### Library generated by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks) diff --git a/sync-for-commerce/RELEASES.md b/sync-for-commerce/RELEASES.md index e670121dc..51b0c6edb 100644 --- a/sync-for-commerce/RELEASES.md +++ b/sync-for-commerce/RELEASES.md @@ -528,4 +528,14 @@ Based on: ### Generated - [python v0.31.0] sync-for-commerce ### Releases -- [PyPI v0.31.0] https://pypi.org/project/codat-sync-for-commerce/0.31.0 - sync-for-commerce \ No newline at end of file +- [PyPI v0.31.0] https://pypi.org/project/codat-sync-for-commerce/0.31.0 - sync-for-commerce + +## 2023-09-13 11:30:50 +### Changes +Based on: +- OpenAPI Doc 1.1 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Sync-Commerce.yaml +- Speakeasy CLI 1.82.5 (2.108.3) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.0] sync-for-commerce +### Releases +- [PyPI v1.1.0] https://pypi.org/project/codat-sync-for-commerce/1.1.0 - sync-for-commerce \ No newline at end of file diff --git a/sync-for-commerce/USAGE.md b/sync-for-commerce/USAGE.md index 089fb8ddf..4e20f38d9 100755 --- a/sync-for-commerce/USAGE.md +++ b/sync-for-commerce/USAGE.md @@ -12,7 +12,8 @@ s = codatsynccommerce.CodatSyncCommerce( ) req = shared.CreateCompany( - name='Bob's Burgers', + description='Requested early access to the new financing scheme.', + name='Bank of Dave', ) res = s.advanced_controls.create_company(req) diff --git a/sync-for-commerce/docs/models/operations/getsyncstatusresponse.md b/sync-for-commerce/docs/models/operations/getsyncstatusresponse.md index 0c96de63b..c58550527 100755 --- a/sync-for-commerce/docs/models/operations/getsyncstatusresponse.md +++ b/sync-for-commerce/docs/models/operations/getsyncstatusresponse.md @@ -5,6 +5,9 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `bad_request` | *Optional[Any]* | :heavy_minus_sign: | Bad Request | | `content_type` | *str* | :heavy_check_mark: | N/A | +| `not_found` | *Optional[Any]* | :heavy_minus_sign: | Not Found | | `status_code` | *int* | :heavy_check_mark: | N/A | -| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | +| `sync_status` | [Optional[shared.SyncStatus]](../../models/shared/syncstatus.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/sync-for-commerce/docs/models/shared/branding.md b/sync-for-commerce/docs/models/shared/branding.md index ba283ef04..095582187 100755 --- a/sync-for-commerce/docs/models/shared/branding.md +++ b/sync-for-commerce/docs/models/shared/branding.md @@ -1,7 +1,5 @@ # Branding -Success - ## Fields diff --git a/sync-for-commerce/docs/models/shared/companies.md b/sync-for-commerce/docs/models/shared/companies.md index b70aa8beb..c4c6e0399 100755 --- a/sync-for-commerce/docs/models/shared/companies.md +++ b/sync-for-commerce/docs/models/shared/companies.md @@ -1,7 +1,5 @@ # Companies -Success - ## Fields diff --git a/sync-for-commerce/docs/models/shared/companysyncstatus.md b/sync-for-commerce/docs/models/shared/companysyncstatus.md index a3d6dcb4b..564dc44df 100755 --- a/sync-for-commerce/docs/models/shared/companysyncstatus.md +++ b/sync-for-commerce/docs/models/shared/companysyncstatus.md @@ -1,7 +1,5 @@ # CompanySyncStatus -Success - ## Fields diff --git a/sync-for-commerce/docs/models/shared/configuration.md b/sync-for-commerce/docs/models/shared/configuration.md index c2ea069aa..75b69a0ec 100755 --- a/sync-for-commerce/docs/models/shared/configuration.md +++ b/sync-for-commerce/docs/models/shared/configuration.md @@ -1,7 +1,5 @@ # Configuration -Success - ## Fields diff --git a/sync-for-commerce/docs/models/shared/connections.md b/sync-for-commerce/docs/models/shared/connections.md index ba1135508..d9a1a748e 100755 --- a/sync-for-commerce/docs/models/shared/connections.md +++ b/sync-for-commerce/docs/models/shared/connections.md @@ -1,7 +1,5 @@ # Connections -OK - ## Fields diff --git a/sync-for-commerce/docs/models/shared/createcompany.md b/sync-for-commerce/docs/models/shared/createcompany.md index 352f29589..df2d37bfe 100755 --- a/sync-for-commerce/docs/models/shared/createcompany.md +++ b/sync-for-commerce/docs/models/shared/createcompany.md @@ -3,6 +3,7 @@ ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | -| `name` | *str* | :heavy_check_mark: | Name of the company in Codat with a partner-commerce data connection. | Bob's Burgers | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| `description` | *Optional[str]* | :heavy_minus_sign: | Additional information about the company. This can be used to store foreign IDs, references, etc. | Requested early access to the new financing scheme. | +| `name` | *str* | :heavy_check_mark: | Name of company being connected. | Bank of Dave | \ No newline at end of file diff --git a/sync-for-commerce/docs/models/shared/datatypefeature.md b/sync-for-commerce/docs/models/shared/datatypefeature.md index d35bba1df..aefc53b2d 100755 --- a/sync-for-commerce/docs/models/shared/datatypefeature.md +++ b/sync-for-commerce/docs/models/shared/datatypefeature.md @@ -5,7 +5,7 @@ Describes support for a given datatype and associated operations ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| `data_type` | [Optional[DataTypeFeatureDataType]](../../models/shared/datatypefeaturedatatype.md) | :heavy_minus_sign: | Available Data types | invoices | -| `supported_features` | list[[SupportedFeature](../../models/shared/supportedfeature.md)] | :heavy_check_mark: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `data_type` | [Optional[DataTypeFeatureDataTypes]](../../models/shared/datatypefeaturedatatypes.md) | :heavy_minus_sign: | Available Data types | invoices | +| `supported_features` | list[[SupportedFeature](../../models/shared/supportedfeature.md)] | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/sync-for-commerce/docs/models/shared/datatypefeaturedatatype.md b/sync-for-commerce/docs/models/shared/datatypefeaturedatatypes.md similarity index 99% rename from sync-for-commerce/docs/models/shared/datatypefeaturedatatype.md rename to sync-for-commerce/docs/models/shared/datatypefeaturedatatypes.md index 510c9deba..7fccfb6fa 100755 --- a/sync-for-commerce/docs/models/shared/datatypefeaturedatatype.md +++ b/sync-for-commerce/docs/models/shared/datatypefeaturedatatypes.md @@ -1,4 +1,4 @@ -# DataTypeFeatureDataType +# DataTypeFeatureDataTypes Available Data types diff --git a/sync-for-commerce/docs/models/shared/errormessage.md b/sync-for-commerce/docs/models/shared/errormessage.md index b32400646..4f34c9a64 100755 --- a/sync-for-commerce/docs/models/shared/errormessage.md +++ b/sync-for-commerce/docs/models/shared/errormessage.md @@ -1,7 +1,5 @@ # ErrorMessage -Your `query` parameter was not correctly formed - ## Fields diff --git a/sync-for-commerce/docs/models/shared/integrations.md b/sync-for-commerce/docs/models/shared/integrations.md index c3fa6846d..31ab0315a 100755 --- a/sync-for-commerce/docs/models/shared/integrations.md +++ b/sync-for-commerce/docs/models/shared/integrations.md @@ -1,7 +1,5 @@ # Integrations -Success - ## Fields diff --git a/sync-for-commerce/docs/models/shared/syncflowurl.md b/sync-for-commerce/docs/models/shared/syncflowurl.md index 96bfbda50..d7628e7c5 100755 --- a/sync-for-commerce/docs/models/shared/syncflowurl.md +++ b/sync-for-commerce/docs/models/shared/syncflowurl.md @@ -1,7 +1,5 @@ # SyncFlowURL -Success - ## Fields diff --git a/sync-for-commerce/docs/models/shared/syncstatus.md b/sync-for-commerce/docs/models/shared/syncstatus.md new file mode 100755 index 000000000..a74ece611 --- /dev/null +++ b/sync-for-commerce/docs/models/shared/syncstatus.md @@ -0,0 +1,19 @@ +# SyncStatus + +The status of syncing for a company and its connections. + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `commerce_sync_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the sync in Codat. | 8d0a044e-b683-4fc9-bd0d-bfb2ca5731b7 | +| `company_id` | *Optional[Any]* | :heavy_minus_sign: | N/A | | +| `data_connections` | list[[Connection](../../models/shared/connection.md)] | :heavy_minus_sign: | Array of containing objects data connection information for the company. | | +| `data_pushed` | *Optional[bool]* | :heavy_minus_sign: | Boolean indicator for data being pushed during a sync operation. | true | +| `error_message` | *Optional[str]* | :heavy_minus_sign: | Friendly error message for the sync operation. | Customer 3b9bf2ed-a618-4af2-80f2-f2b57fddc748 is not in an Active state. (Archived) | +| `sync_exception_message` | *Optional[str]* | :heavy_minus_sign: | Exception message for the sync operation. | Customer 3b9bf2ed-a618-4af2-80f2-f2b57fddc748 is not in an Active state. (Archived) | +| `sync_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the sync in Codat. | 730dcf2e-3afc-4d83-bb90-9f4b95dddf68 | +| `sync_status` | *Optional[str]* | :heavy_minus_sign: | Status of the sync of the company data. This is linked to status code. | ValidateError, Pending | +| `sync_status_code` | *Optional[int]* | :heavy_minus_sign: | Numerical status code sync of the company data. | 4000 | +| `sync_utc` | *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-23T00:00:00.000Z | \ No newline at end of file diff --git a/sync-for-commerce/docs/models/shared/syncsummary.md b/sync-for-commerce/docs/models/shared/syncsummary.md index f89e70491..ec742700b 100755 --- a/sync-for-commerce/docs/models/shared/syncsummary.md +++ b/sync-for-commerce/docs/models/shared/syncsummary.md @@ -1,7 +1,5 @@ # SyncSummary -Success - ## Fields @@ -12,7 +10,7 @@ Success | `data_connections` | list[[Connection](../../models/shared/connection.md)] | :heavy_minus_sign: | Array of containing objects data connection information for the company. | | | `data_pushed` | *Optional[bool]* | :heavy_minus_sign: | Boolean indicator for data being pushed during a sync operation. | true | | `error_message` | *Optional[str]* | :heavy_minus_sign: | Friendly error message for the sync operation. | Customer 3b9bf2ed-a618-4af2-80f2-f2b57fddc748 is not in an Active state. (Archived) | -| `sync_date_range_utc` | [Optional[DateRange]](../../models/shared/daterange.md) | :heavy_minus_sign: | N/A | | +| `sync_date_range_utc` | [Optional[SyncSummarySyncDateRangeUtc]](../../models/shared/syncsummarysyncdaterangeutc.md) | :heavy_minus_sign: | N/A | | | `sync_exception_message` | *Optional[str]* | :heavy_minus_sign: | Exception message for the sync operation. | Customer 3b9bf2ed-a618-4af2-80f2-f2b57fddc748 is not in an Active state. (Archived) | | `sync_status` | *Optional[str]* | :heavy_minus_sign: | Status of the sync of the company data. This is linked to status code. | ValidateError, Pending | | `sync_status_code` | *Optional[int]* | :heavy_minus_sign: | Numerical status code sync of the company data. | 4000 | diff --git a/sync-for-commerce/docs/models/shared/daterange.md b/sync-for-commerce/docs/models/shared/syncsummarysyncdaterangeutc.md similarity index 99% rename from sync-for-commerce/docs/models/shared/daterange.md rename to sync-for-commerce/docs/models/shared/syncsummarysyncdaterangeutc.md index 6935d711b..61b8ce4db 100755 --- a/sync-for-commerce/docs/models/shared/daterange.md +++ b/sync-for-commerce/docs/models/shared/syncsummarysyncdaterangeutc.md @@ -1,4 +1,4 @@ -# DateRange +# SyncSummarySyncDateRangeUtc ## Fields diff --git a/sync-for-commerce/docs/models/shared/updateconnection.md b/sync-for-commerce/docs/models/shared/updateconnection.md index 3b8e4f2c5..44e203f02 100755 --- a/sync-for-commerce/docs/models/shared/updateconnection.md +++ b/sync-for-commerce/docs/models/shared/updateconnection.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -| `status` | *Optional[str]* | :heavy_minus_sign: | The current authorization status of the data connection. | Linked | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `status` | [Optional[DataConnectionStatus]](../../models/shared/dataconnectionstatus.md) | :heavy_minus_sign: | The current authorization status of the data connection. | \ No newline at end of file diff --git a/sync-for-commerce/docs/models/shared/visibleaccounts.md b/sync-for-commerce/docs/models/shared/visibleaccounts.md index 9b37f0489..e0c6f9690 100755 --- a/sync-for-commerce/docs/models/shared/visibleaccounts.md +++ b/sync-for-commerce/docs/models/shared/visibleaccounts.md @@ -1,7 +1,5 @@ # VisibleAccounts -Success - ## Fields diff --git a/sync-for-commerce/docs/sdks/advancedcontrols/README.md b/sync-for-commerce/docs/sdks/advancedcontrols/README.md index 134c724d6..7e2c893ad 100755 --- a/sync-for-commerce/docs/sdks/advancedcontrols/README.md +++ b/sync-for-commerce/docs/sdks/advancedcontrols/README.md @@ -28,7 +28,8 @@ s = codatsynccommerce.CodatSyncCommerce( ) req = shared.CreateCompany( - name='Bob's Burgers', + description='Requested early access to the new financing scheme.', + name='Bank of Dave', ) res = s.advanced_controls.create_company(req) diff --git a/sync-for-commerce/docs/sdks/codatsynccommerce/README.md b/sync-for-commerce/docs/sdks/codatsynccommerce/README.md index ce3d585fa..e347f08d2 100755 --- a/sync-for-commerce/docs/sdks/codatsynccommerce/README.md +++ b/sync-for-commerce/docs/sdks/codatsynccommerce/README.md @@ -4,11 +4,11 @@ Sync for Commerce: The API for Sync for Commerce. -Sync for Commerce is an API and a set of supporting tools built to enable e-commerce and point of sale platforms to provide high-quality integrations with numerous accounting platform through standardized API, seamlessly transforming business sale's data into accounting artefacts. +Sync for Commerce automatically replicates and reconciles sales data from a merchant’s source PoS, Payments, and eCommerce systems into their accounting software. This eliminates manual processing by merchants and transforms their ability to run and grow their business. [Read More...](https://docs.codat.io/commerce/overview) - +Not seeing the endpoints you're expecting? We've [reorganized our products](https://docs.codat.io/updates/230901-new-products), and you may be using a [different version of Sync for Commerce](https://docs.codat.io/sync-for-commerce-v1-api#/). ### Available Operations diff --git a/sync-for-commerce/docs/sdks/connections/README.md b/sync-for-commerce/docs/sdks/connections/README.md index 8b6ac499f..3566d1c59 100755 --- a/sync-for-commerce/docs/sdks/connections/README.md +++ b/sync-for-commerce/docs/sdks/connections/README.md @@ -2,12 +2,12 @@ ## Overview -Create new and manage existing Sync for Commerce companies using the Sync flow UI. +Create new and manage existing Sync for Commerce connections using the Sync flow UI. ### Available Operations * [create](#create) - Create connection -* [get_sync_flow_url](#get_sync_flow_url) - Retrieve sync flow url +* [get_sync_flow_url](#get_sync_flow_url) - Start new sync flow * [list](#list) - List connections * [update_authorization](#update_authorization) - Update authorization * [update_connection](#update_connection) - Update connection @@ -58,7 +58,7 @@ if res.connection is not None: ## get_sync_flow_url -Get a URL for Sync Flow including a one time passcode. +Create a new company and connections. Get a URL for Sync Flow, including a one time passcode. ### Example Usage @@ -158,9 +158,7 @@ s = codatsynccommerce.CodatSyncCommerce( req = operations.UpdateConnectionAuthorizationRequest( request_body={ - "illum": 'vel', - "error": 'deserunt', - "suscipit": 'iure', + "corrupti": 'illum', }, company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', @@ -203,7 +201,7 @@ s = codatsynccommerce.CodatSyncCommerce( req = operations.UpdateConnectionRequest( update_connection=shared.UpdateConnection( - status='Linked', + status=shared.DataConnectionStatus.LINKED, ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', diff --git a/sync-for-commerce/docs/sdks/integrations/README.md b/sync-for-commerce/docs/sdks/integrations/README.md index b6dd8d03c..b74e8e3fb 100755 --- a/sync-for-commerce/docs/sdks/integrations/README.md +++ b/sync-for-commerce/docs/sdks/integrations/README.md @@ -26,7 +26,7 @@ s = codatsynccommerce.CodatSyncCommerce( ) req = operations.GetIntegrationBrandingRequest( - platform_key='magnam', + platform_key='error', ) res = s.integrations.get_branding(req) @@ -68,7 +68,7 @@ req = operations.ListIntegrationsRequest( order_by='-modifiedDate', page=1, page_size=100, - query='debitis', + query='deserunt', ) res = s.integrations.list(req) diff --git a/sync-for-commerce/docs/sdks/sync/README.md b/sync-for-commerce/docs/sdks/sync/README.md index 8b012e6dc..e49bad5d5 100755 --- a/sync-for-commerce/docs/sdks/sync/README.md +++ b/sync-for-commerce/docs/sdks/sync/README.md @@ -6,7 +6,7 @@ Initiate and monitor the sync of company data into accounting software. ### Available Operations -* [get](#get) - Get Sync status +* [get](#get) - Get sync status * [get_last_successful_sync](#get_last_successful_sync) - Last successful sync * [get_latest_sync](#get_latest_sync) - Latest sync status * [get_status](#get_status) - Get sync status @@ -154,7 +154,7 @@ req = operations.GetSyncStatusRequest( res = s.sync.get_status(req) -if res.status_code == 200: +if res.sync_status is not None: # handle response ``` diff --git a/sync-for-commerce/docs/sdks/syncflowpreferences/README.md b/sync-for-commerce/docs/sdks/syncflowsettings/README.md similarity index 93% rename from sync-for-commerce/docs/sdks/syncflowpreferences/README.md rename to sync-for-commerce/docs/sdks/syncflowsettings/README.md index 591bc7e85..67e54cdc7 100755 --- a/sync-for-commerce/docs/sdks/syncflowpreferences/README.md +++ b/sync-for-commerce/docs/sdks/syncflowsettings/README.md @@ -1,4 +1,4 @@ -# sync_flow_preferences +# sync_flow_settings ## Overview @@ -28,7 +28,7 @@ s = codatsynccommerce.CodatSyncCommerce( ) -res = s.sync_flow_preferences.get_config_text_sync_flow() +res = s.sync_flow_settings.get_config_text_sync_flow() if res.localization_info is not None: # handle response @@ -63,11 +63,11 @@ s = codatsynccommerce.CodatSyncCommerce( ) req = operations.GetVisibleAccountsRequest( - client_id='67cc8796-ed15-41a0-9dfc-2ddf7cc78ca1', - platform_key='ba928fc8-1674-42cb-b392-05929396fea7', + client_id='e0f467cc-8796-4ed1-91a0-5dfc2ddf7cc7', + platform_key='8ca1ba92-8fc8-4167-82cb-739205929396', ) -res = s.sync_flow_preferences.get_visible_accounts(req) +res = s.sync_flow_settings.get_visible_accounts(req) if res.visible_accounts is not None: # handle response @@ -103,17 +103,13 @@ s = codatsynccommerce.CodatSyncCommerce( ) req = { - "iste": shared.Localization( + "hic": shared.Localization( required=False, - text='iure', - ), - "saepe": shared.Localization( - required=False, - text='quidem', + text='saepe', ), } -res = s.sync_flow_preferences.update_config_text_sync_flow(req) +res = s.sync_flow_settings.update_config_text_sync_flow(req) if res.localization_info is not None: # handle response @@ -151,13 +147,13 @@ s = codatsynccommerce.CodatSyncCommerce( req = operations.UpdateVisibleAccountsSyncFlowRequest( visible_accounts=shared.VisibleAccounts( visible_accounts=[ - 'ipsa', + 'fuga', ], ), - platform_key='faaa2352-c595-4590-baff-1a3a2fa94677', + platform_key='7596eb10-faaa-4235-ac59-55907aff1a3a', ) -res = s.sync_flow_preferences.update_visible_accounts_sync_flow(req) +res = s.sync_flow_settings.update_visible_accounts_sync_flow(req) if res.visible_accounts is not None: # handle response diff --git a/sync-for-commerce/files.gen b/sync-for-commerce/files.gen index 2266a939d..d60e4dcee 100755 --- a/sync-for-commerce/files.gen +++ b/sync-for-commerce/files.gen @@ -3,7 +3,7 @@ src/codatsynccommerce/advanced_controls.py src/codatsynccommerce/connections.py src/codatsynccommerce/integrations.py src/codatsynccommerce/sync.py -src/codatsynccommerce/sync_flow_preferences.py +src/codatsynccommerce/sync_flow_settings.py src/codatsynccommerce/sdk.py pylintrc setup.py @@ -80,8 +80,8 @@ src/codatsynccommerce/models/shared/supportedfeature.py src/codatsynccommerce/models/shared/featuretype.py src/codatsynccommerce/models/shared/featurestate.py src/codatsynccommerce/models/shared/companysyncstatus.py +src/codatsynccommerce/models/shared/syncstatus.py src/codatsynccommerce/models/shared/syncsummary.py -src/codatsynccommerce/models/shared/daterange.py src/codatsynccommerce/models/shared/synctolatestargs.py src/codatsynccommerce/models/shared/syncrange.py src/codatsynccommerce/models/shared/localization.py @@ -95,7 +95,7 @@ docs/sdks/advancedcontrols/README.md docs/sdks/connections/README.md docs/sdks/integrations/README.md docs/sdks/sync/README.md -docs/sdks/syncflowpreferences/README.md +docs/sdks/syncflowsettings/README.md USAGE.md docs/models/operations/createcompanyresponse.md docs/models/operations/getconfigurationrequest.md @@ -179,14 +179,15 @@ docs/models/shared/brandingbutton.md docs/models/shared/integrations.md docs/models/shared/integration.md docs/models/shared/sourcetype.md -docs/models/shared/datatypefeaturedatatype.md +docs/models/shared/datatypefeaturedatatypes.md docs/models/shared/datatypefeature.md docs/models/shared/supportedfeature.md docs/models/shared/featuretype.md docs/models/shared/featurestate.md docs/models/shared/companysyncstatus.md +docs/models/shared/syncstatus.md +docs/models/shared/syncsummarysyncdaterangeutc.md docs/models/shared/syncsummary.md -docs/models/shared/daterange.md docs/models/shared/synctolatestargs.md docs/models/shared/syncrangedaterange.md docs/models/shared/syncrange.md diff --git a/sync-for-commerce/gen.yaml b/sync-for-commerce/gen.yaml index 2ee356d81..c0b1ba89c 100644 --- a/sync-for-commerce/gen.yaml +++ b/sync-for-commerce/gen.yaml @@ -1,17 +1,25 @@ configVersion: 1.0.0 management: - docChecksum: 853aebc76021ec17db9b1abb7a33f340 - docVersion: 2.1.0 - speakeasyVersion: 1.53.0 - generationVersion: 2.58.0 + docChecksum: c0acc08add5921c52dad125db9a25813 + docVersion: "1.1" + speakeasyVersion: 1.82.5 + generationVersion: 2.108.3 generation: sdkClassName: CodatSyncCommerce singleTagPerOp: false telemetryEnabled: true +features: + python: + core: 2.85.4 + deprecations: 2.81.1 + examples: 2.81.2 + globalSecurity: 2.81.1 + globalServerURLs: 2.82.0 + nameOverrides: 2.81.1 + retries: 2.82.0 python: - version: 1.0.0 + version: 1.1.0 author: Codat - description: Push merchants' data from your ecommerce or point-of-sale (POS) platform - into your merchants' accounting platform. + description: Push merchants' data from your ecommerce or point-of-sale (POS) platform into your merchants' accounting platform. maxMethodParams: 0 packageName: codat-sync-for-commerce diff --git a/sync-for-commerce/setup.py b/sync-for-commerce/setup.py index 4d9041d9f..33176971c 100755 --- a/sync-for-commerce/setup.py +++ b/sync-for-commerce/setup.py @@ -10,7 +10,7 @@ setuptools.setup( name="codat-sync-for-commerce", - version="0.31.0", + version="1.1.0", author="Codat", description="Push merchants' data from your ecommerce or point-of-sale (POS) platform into your merchants' accounting platform.", long_description=long_description, diff --git a/sync-for-commerce/src/codatsynccommerce/advanced_controls.py b/sync-for-commerce/src/codatsynccommerce/advanced_controls.py index aa62d822a..6fba7bdea 100755 --- a/sync-for-commerce/src/codatsynccommerce/advanced_controls.py +++ b/sync-for-commerce/src/codatsynccommerce/advanced_controls.py @@ -29,9 +29,13 @@ def create_company(self, request: shared.CreateCompany, retries: Optional[utils. client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('POST', url, data=data, files=form, headers=headers) @@ -68,9 +72,13 @@ def get_configuration(self, request: operations.GetConfigurationRequest, retries client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -108,9 +116,13 @@ def list_companies(self, request: operations.ListCompaniesRequest, retries: Opti client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, params=query_params, headers=headers) @@ -147,9 +159,13 @@ def set_configuration(self, request: operations.SetConfigurationRequest, retries client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('POST', url, headers=headers) diff --git a/sync-for-commerce/src/codatsynccommerce/connections.py b/sync-for-commerce/src/codatsynccommerce/connections.py index c5e5bb115..2fe538470 100755 --- a/sync-for-commerce/src/codatsynccommerce/connections.py +++ b/sync-for-commerce/src/codatsynccommerce/connections.py @@ -6,7 +6,7 @@ from typing import Optional class Connections: - r"""Create new and manage existing Sync for Commerce companies using the Sync flow UI.""" + r"""Create new and manage existing Sync for Commerce connections using the Sync flow UI.""" sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -31,9 +31,13 @@ def create(self, request: operations.CreateConnectionRequest, retries: Optional[ client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('POST', url, data=data, files=form, headers=headers) @@ -64,8 +68,8 @@ def do_request(): def get_sync_flow_url(self, request: operations.GetSyncFlowURLRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetSyncFlowURLResponse: - r"""Retrieve sync flow url - Get a URL for Sync Flow including a one time passcode. + r"""Start new sync flow + Create a new company and connections. Get a URL for Sync Flow, including a one time passcode. """ base_url = utils.template_url(*self.sdk_configuration.get_server_details()) @@ -77,9 +81,13 @@ def get_sync_flow_url(self, request: operations.GetSyncFlowURLRequest, retries: client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, params=query_params, headers=headers) @@ -117,9 +125,13 @@ def list(self, request: operations.ListConnectionsRequest, retries: Optional[uti client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, params=query_params, headers=headers) @@ -165,9 +177,13 @@ def update_authorization(self, request: operations.UpdateConnectionAuthorization client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('PUT', url, data=data, files=form, headers=headers) @@ -207,9 +223,13 @@ def update_connection(self, request: operations.UpdateConnectionRequest, retries client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('PATCH', url, data=data, files=form, headers=headers) diff --git a/sync-for-commerce/src/codatsynccommerce/integrations.py b/sync-for-commerce/src/codatsynccommerce/integrations.py index 5a0fe493b..d3906d4bf 100755 --- a/sync-for-commerce/src/codatsynccommerce/integrations.py +++ b/sync-for-commerce/src/codatsynccommerce/integrations.py @@ -26,9 +26,13 @@ def get_branding(self, request: operations.GetIntegrationBrandingRequest, retrie client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -66,9 +70,13 @@ def list(self, request: operations.ListIntegrationsRequest, retries: Optional[ut client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, params=query_params, headers=headers) diff --git a/sync-for-commerce/src/codatsynccommerce/models/operations/get_sync_status.py b/sync-for-commerce/src/codatsynccommerce/models/operations/get_sync_status.py index ee6e48d51..fb32446a2 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/operations/get_sync_status.py +++ b/sync-for-commerce/src/codatsynccommerce/models/operations/get_sync_status.py @@ -3,7 +3,8 @@ from __future__ import annotations import dataclasses import requests as requests_http -from typing import Optional +from ..shared import syncstatus as shared_syncstatus +from typing import Any, Optional @@ -19,6 +20,12 @@ class GetSyncStatusRequest: class GetSyncStatusResponse: content_type: str = dataclasses.field() status_code: int = dataclasses.field() + bad_request: Optional[Any] = dataclasses.field(default=None) + r"""Bad Request""" + not_found: Optional[Any] = dataclasses.field(default=None) + r"""Not Found""" raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + sync_status: Optional[shared_syncstatus.SyncStatus] = dataclasses.field(default=None) + r"""Success""" diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/__init__.py b/sync-for-commerce/src/codatsynccommerce/models/shared/__init__.py index 92dde9134..c3ad58330 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/__init__.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/__init__.py @@ -17,7 +17,6 @@ from .dataconnectionerror import * from .dataconnectionstatus import * from .datatypefeature import * -from .daterange import * from .errormessage import * from .featurestate import * from .featuretype import * @@ -45,6 +44,7 @@ from .supportedfeature import * from .syncflowurl import * from .syncrange import * +from .syncstatus import * from .syncsummary import * from .synctolatestargs import * from .taxrateamount import * @@ -52,4 +52,4 @@ from .updateconnection import * from .visibleaccounts import * -__all__ = ["AccountOption","Branding","BrandingButton","BrandingImage","BrandingLogo","Companies","Company","CompanySyncStatus","ConfigAccount","Configuration","Connection","ConnectionSourceType","Connections","CreateCompany","Customer","DataConnectionError","DataConnectionStatus","DataTypeFeature","DataTypeFeatureDataType","DateRange","ErrorMessage","FeatureState","FeatureType","Fees","FeesSupplier","Grouping","GroupingLevels","GroupingPeriod","HalRef","ImageReference","Integration","Integrations","InvoiceLevelSelection","InvoiceLineLevelSelection","InvoiceStatus","Links","Localization","NewPayments","NewTaxRates","Option","Payments","Sales","Security","SourceType","SupportedFeature","SyncFlowURL","SyncRange","SyncRangeDateRange","SyncSummary","SyncToLatestArgs","TaxRateAmount","TaxRateMapping","UpdateConnection","VisibleAccounts"] +__all__ = ["AccountOption","Branding","BrandingButton","BrandingImage","BrandingLogo","Companies","Company","CompanySyncStatus","ConfigAccount","Configuration","Connection","ConnectionSourceType","Connections","CreateCompany","Customer","DataConnectionError","DataConnectionStatus","DataTypeFeature","DataTypeFeatureDataTypes","ErrorMessage","FeatureState","FeatureType","Fees","FeesSupplier","Grouping","GroupingLevels","GroupingPeriod","HalRef","ImageReference","Integration","Integrations","InvoiceLevelSelection","InvoiceLineLevelSelection","InvoiceStatus","Links","Localization","NewPayments","NewTaxRates","Option","Payments","Sales","Security","SourceType","SupportedFeature","SyncFlowURL","SyncRange","SyncRangeDateRange","SyncStatus","SyncSummary","SyncSummarySyncDateRangeUtc","SyncToLatestArgs","TaxRateAmount","TaxRateMapping","UpdateConnection","VisibleAccounts"] diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/branding.py b/sync-for-commerce/src/codatsynccommerce/models/shared/branding.py index afc39ec11..0231d9446 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/branding.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/branding.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Branding: - r"""Success""" button: Optional[shared_brandingbutton.BrandingButton] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('button'), 'exclude': lambda f: f is None }}) r"""Button branding references.""" logo: Optional[shared_brandinglogo.BrandingLogo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('logo'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/companies.py b/sync-for-commerce/src/codatsynccommerce/models/shared/companies.py index 64bc8dbd1..9eb74e0da 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/companies.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/companies.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Companies: - r"""Success""" links: shared_links.Links = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_links') }}) page_number: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageNumber') }}) page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageSize') }}) diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/companysyncstatus.py b/sync-for-commerce/src/codatsynccommerce/models/shared/companysyncstatus.py index 4408ec369..d2a9ddb37 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/companysyncstatus.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/companysyncstatus.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class CompanySyncStatus: - r"""Success""" company_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId'), 'exclude': lambda f: f is None }}) r"""Unique identifier for your SMB in Codat.""" data_pushed: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataPushed'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/configuration.py b/sync-for-commerce/src/codatsynccommerce/models/shared/configuration.py index c891e2d09..a6841359a 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/configuration.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/configuration.py @@ -15,7 +15,6 @@ @dataclasses.dataclass class Configuration: - r"""Success""" fees: Optional[shared_fees.Fees] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fees'), 'exclude': lambda f: f is None }}) new_payments: Optional[shared_newpayments.NewPayments] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('newPayments'), 'exclude': lambda f: f is None }}) payments: Optional[shared_payments.Payments] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payments'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/connections.py b/sync-for-commerce/src/codatsynccommerce/models/shared/connections.py index da2dc2774..a0b61c196 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/connections.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/connections.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Connections: - r"""OK""" links: shared_links.Links = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_links') }}) page_number: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageNumber') }}) page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageSize') }}) diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/createcompany.py b/sync-for-commerce/src/codatsynccommerce/models/shared/createcompany.py index 2b688faec..105191212 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/createcompany.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/createcompany.py @@ -4,6 +4,7 @@ import dataclasses from codatsynccommerce import utils from dataclasses_json import Undefined, dataclass_json +from typing import Optional @dataclass_json(undefined=Undefined.EXCLUDE) @@ -11,6 +12,8 @@ @dataclasses.dataclass class CreateCompany: name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) - r"""Name of the company in Codat with a partner-commerce data connection.""" + r"""Name of company being connected.""" + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + r"""Additional information about the company. This can be used to store foreign IDs, references, etc.""" diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/datatypefeature.py b/sync-for-commerce/src/codatsynccommerce/models/shared/datatypefeature.py index e245cd348..712bec761 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/datatypefeature.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/datatypefeature.py @@ -8,7 +8,7 @@ from enum import Enum from typing import Optional -class DataTypeFeatureDataType(str, Enum): +class DataTypeFeatureDataTypes(str, Enum): r"""Available Data types""" ACCOUNT_TRANSACTIONS = 'accountTransactions' BALANCE_SHEET = 'balanceSheet' @@ -60,7 +60,7 @@ class DataTypeFeatureDataType(str, Enum): class DataTypeFeature: r"""Describes support for a given datatype and associated operations""" supported_features: list[shared_supportedfeature.SupportedFeature] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('supportedFeatures') }}) - data_type: Optional[DataTypeFeatureDataType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) + data_type: Optional[DataTypeFeatureDataTypes] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) r"""Available Data types""" diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/daterange.py b/sync-for-commerce/src/codatsynccommerce/models/shared/daterange.py deleted file mode 100755 index d67187afe..000000000 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/daterange.py +++ /dev/null @@ -1,57 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" - -from __future__ import annotations -import dataclasses -from codatsynccommerce import utils -from dataclasses_json import Undefined, dataclass_json -from typing import Optional - - -@dataclass_json(undefined=Undefined.EXCLUDE) - -@dataclasses.dataclass -class DateRange: - finish: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('finish'), '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: - - ``` - 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. - """ - start: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start'), '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: - - ``` - 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. - """ - - diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/errormessage.py b/sync-for-commerce/src/codatsynccommerce/models/shared/errormessage.py index 73593c1f2..93e9f616e 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/errormessage.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/errormessage.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class ErrorMessage: - r"""Your `query` parameter was not correctly formed""" can_be_retried: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('canBeRetried'), 'exclude': lambda f: f is None }}) correlation_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('correlationId'), 'exclude': lambda f: f is None }}) detailed_error_code: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('detailedErrorCode'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/integrations.py b/sync-for-commerce/src/codatsynccommerce/models/shared/integrations.py index 4bb861a4f..eaab607a0 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/integrations.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/integrations.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Integrations: - r"""Success""" links: shared_links.Links = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_links') }}) page_number: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageNumber') }}) page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageSize') }}) diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/syncflowurl.py b/sync-for-commerce/src/codatsynccommerce/models/shared/syncflowurl.py index 5f45ad00c..9ad763321 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/syncflowurl.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/syncflowurl.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class SyncFlowURL: - r"""Success""" url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) r"""Sync flow URL.""" diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/syncstatus.py b/sync-for-commerce/src/codatsynccommerce/models/shared/syncstatus.py new file mode 100755 index 000000000..bb842ec24 --- /dev/null +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/syncstatus.py @@ -0,0 +1,55 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import connection as shared_connection +from codatsynccommerce import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Any, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncStatus: + r"""The status of syncing for a company and its connections.""" + commerce_sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerceSyncId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for the sync in Codat.""" + company_id: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId'), 'exclude': lambda f: f is None }}) + data_connections: Optional[list[shared_connection.Connection]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnections'), 'exclude': lambda f: f is None }}) + r"""Array of containing objects data connection information for the company.""" + data_pushed: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataPushed'), 'exclude': lambda f: f is None }}) + r"""Boolean indicator for data being pushed during a sync operation.""" + error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorMessage'), 'exclude': lambda f: f is None }}) + r"""Friendly error message for the sync operation.""" + sync_exception_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncExceptionMessage'), 'exclude': lambda f: f is None }}) + r"""Exception message for the sync operation.""" + sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for the sync in Codat.""" + sync_status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncStatus'), 'exclude': lambda f: f is None }}) + r"""Status of the sync of the company data. This is linked to status code.""" + sync_status_code: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncStatusCode'), 'exclude': lambda f: f is None }}) + r"""Numerical status code sync of the company data.""" + sync_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncUtc'), '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: + + ``` + 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. + """ + + diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/syncsummary.py b/sync-for-commerce/src/codatsynccommerce/models/shared/syncsummary.py index 86c1567ac..26d5069ba 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/syncsummary.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/syncsummary.py @@ -3,17 +3,65 @@ from __future__ import annotations import dataclasses from ..shared import connection as shared_connection -from ..shared import daterange as shared_daterange from codatsynccommerce import utils from dataclasses_json import Undefined, dataclass_json from typing import Optional +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncSummarySyncDateRangeUtc: + finish: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('finish'), '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: + + ``` + 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. + """ + start: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start'), '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: + + ``` + 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. + """ + + + + @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass class SyncSummary: - r"""Success""" commerce_sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('commerceSyncId'), 'exclude': lambda f: f is None }}) r"""Unique identifier for the sync in Codat.""" company_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId'), 'exclude': lambda f: f is None }}) @@ -24,7 +72,7 @@ class SyncSummary: r"""Boolean indicator for data being pushed during a sync operation.""" error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorMessage'), 'exclude': lambda f: f is None }}) r"""Friendly error message for the sync operation.""" - sync_date_range_utc: Optional[shared_daterange.DateRange] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncDateRangeUtc'), 'exclude': lambda f: f is None }}) + sync_date_range_utc: Optional[SyncSummarySyncDateRangeUtc] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncDateRangeUtc'), 'exclude': lambda f: f is None }}) sync_exception_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncExceptionMessage'), 'exclude': lambda f: f is None }}) r"""Exception message for the sync operation.""" sync_status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncStatus'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/updateconnection.py b/sync-for-commerce/src/codatsynccommerce/models/shared/updateconnection.py index 4b7002256..77b5b6edb 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/updateconnection.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/updateconnection.py @@ -2,6 +2,7 @@ from __future__ import annotations import dataclasses +from ..shared import dataconnectionstatus as shared_dataconnectionstatus from codatsynccommerce import utils from dataclasses_json import Undefined, dataclass_json from typing import Optional @@ -11,7 +12,7 @@ @dataclasses.dataclass class UpdateConnection: - status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + status: Optional[shared_dataconnectionstatus.DataConnectionStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) r"""The current authorization status of the data connection.""" diff --git a/sync-for-commerce/src/codatsynccommerce/models/shared/visibleaccounts.py b/sync-for-commerce/src/codatsynccommerce/models/shared/visibleaccounts.py index 90a08d8f6..2f1edbd15 100755 --- a/sync-for-commerce/src/codatsynccommerce/models/shared/visibleaccounts.py +++ b/sync-for-commerce/src/codatsynccommerce/models/shared/visibleaccounts.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class VisibleAccounts: - r"""Success""" visible_accounts: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('visibleAccounts'), 'exclude': lambda f: f is None }}) r"""Visible accounts on sync flow.""" diff --git a/sync-for-commerce/src/codatsynccommerce/sdk.py b/sync-for-commerce/src/codatsynccommerce/sdk.py index 970a99fcd..cd6f2d4b1 100755 --- a/sync-for-commerce/src/codatsynccommerce/sdk.py +++ b/sync-for-commerce/src/codatsynccommerce/sdk.py @@ -6,28 +6,28 @@ from .integrations import Integrations from .sdkconfiguration import SDKConfiguration from .sync import Sync -from .sync_flow_preferences import SyncFlowPreferences +from .sync_flow_settings import SyncFlowSettings from codatsynccommerce import utils from codatsynccommerce.models import shared class CodatSyncCommerce: r"""Sync for Commerce: The API for Sync for Commerce. - Sync for Commerce is an API and a set of supporting tools built to enable e-commerce and point of sale platforms to provide high-quality integrations with numerous accounting platform through standardized API, seamlessly transforming business sale's data into accounting artefacts. + Sync for Commerce automatically replicates and reconciles sales data from a merchant’s source PoS, Payments, and eCommerce systems into their accounting software. This eliminates manual processing by merchants and transforms their ability to run and grow their business. [Read More...](https://docs.codat.io/commerce/overview) - + Not seeing the endpoints you're expecting? We've [reorganized our products](https://docs.codat.io/updates/230901-new-products), and you may be using a [different version of Sync for Commerce](https://docs.codat.io/sync-for-commerce-v1-api#/). """ advanced_controls: AdvancedControls r"""Advanced company management and sync preferences.""" connections: Connections - r"""Create new and manage existing Sync for Commerce companies using the Sync flow UI.""" + r"""Create new and manage existing Sync for Commerce connections using the Sync flow UI.""" integrations: Integrations r"""View useful information about codat's integrations.""" sync: Sync r"""Initiate and monitor the sync of company data into accounting software.""" - sync_flow_preferences: SyncFlowPreferences + sync_flow_settings: SyncFlowSettings r"""Configure preferences for any given Sync for Commerce company using sync flow.""" sdk_configuration: SDKConfiguration @@ -37,7 +37,8 @@ def __init__(self, server_idx: int = None, server_url: str = None, url_params: dict[str, str] = None, - client: requests_http.Session = None + client: requests_http.Session = None, + retry_config: utils.RetryConfig = None ) -> None: """Instantiates the SDK configuring it with the provided parameters. @@ -50,7 +51,9 @@ def __init__(self, :param url_params: Parameters to optionally template the server URL with :type url_params: dict[str, str] :param client: The requests.Session HTTP client to use for all operations - :type client: requests_http.Session + :type client: requests_http.Session + :param retry_config: The utils.RetryConfig to use globally + :type retry_config: utils.RetryConfig """ if client is None: client = requests_http.Session() @@ -61,7 +64,7 @@ def __init__(self, if url_params is not None: server_url = utils.template_url(server_url, url_params) - self.sdk_configuration = SDKConfiguration(client, security_client, server_url, server_idx) + self.sdk_configuration = SDKConfiguration(client, security_client, server_url, server_idx, retry_config=retry_config) self._init_sdks() @@ -70,5 +73,5 @@ def _init_sdks(self): self.connections = Connections(self.sdk_configuration) self.integrations = Integrations(self.sdk_configuration) self.sync = Sync(self.sdk_configuration) - self.sync_flow_preferences = SyncFlowPreferences(self.sdk_configuration) + self.sync_flow_settings = SyncFlowSettings(self.sdk_configuration) \ No newline at end of file diff --git a/sync-for-commerce/src/codatsynccommerce/sdkconfiguration.py b/sync-for-commerce/src/codatsynccommerce/sdkconfiguration.py index f7810edd4..c9557f9b6 100755 --- a/sync-for-commerce/src/codatsynccommerce/sdkconfiguration.py +++ b/sync-for-commerce/src/codatsynccommerce/sdkconfiguration.py @@ -3,6 +3,8 @@ import requests from dataclasses import dataclass +from .utils.retries import RetryConfig + SERVERS = [ 'https://api.codat.io', @@ -18,8 +20,9 @@ class SDKConfiguration: server_idx: int = 0 language: str = 'python' openapi_doc_version: str = '1.1' - sdk_version: str = '0.31.0' - gen_version: str = '2.91.4' + sdk_version: str = '1.1.0' + gen_version: str = '2.108.3' + retry_config: RetryConfig = None def get_server_details(self) -> tuple[str, dict[str, str]]: if self.server_url: diff --git a/sync-for-commerce/src/codatsynccommerce/sync.py b/sync-for-commerce/src/codatsynccommerce/sync.py index 970a1dd5c..2b8e8e9c2 100755 --- a/sync-for-commerce/src/codatsynccommerce/sync.py +++ b/sync-for-commerce/src/codatsynccommerce/sync.py @@ -3,7 +3,7 @@ from .sdkconfiguration import SDKConfiguration from codatsynccommerce import utils from codatsynccommerce.models import errors, operations, shared -from typing import Optional +from typing import Any, Optional class Sync: r"""Initiate and monitor the sync of company data into accounting software.""" @@ -14,21 +14,25 @@ def __init__(self, sdk_config: SDKConfiguration) -> None: def get(self, request: operations.GetSyncByIDRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetSyncByIDResponse: - r"""Get Sync status + r"""Get sync status Get the sync status for a specified sync """ base_url = utils.template_url(*self.sdk_configuration.get_server_details()) - url = utils.generate_url(operations.GetSyncByIDRequest, base_url, '/companies/{companyId}/sync/expenses/syncs/{syncId}/status', request) + url = utils.generate_url(operations.GetSyncByIDRequest, base_url, '/companies/{companyId}/sync/commerce/syncs/{syncId}/status', request) headers = {} headers['Accept'] = 'application/json' headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -71,9 +75,13 @@ def get_last_successful_sync(self, request: operations.GetLastSuccessfulSyncRequ client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -116,9 +124,13 @@ def get_latest_sync(self, request: operations.GetLatestSyncRequest, retries: Opt client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -156,14 +168,18 @@ def get_status(self, request: operations.GetSyncStatusRequest, retries: Optional url = utils.generate_url(operations.GetSyncStatusRequest, base_url, '/meta/companies/{companyId}/sync/commerce/status', request) headers = {} - headers['Accept'] = '*/*' + headers['Accept'] = 'application/json' headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -177,6 +193,24 @@ def do_request(): res = operations.GetSyncStatusResponse(status_code=http_res.status_code, content_type=content_type, 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[shared.SyncStatus]) + res.sync_status = out + else: + 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: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[Any]) + res.bad_request = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 404: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[Any]) + res.not_found = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) return res @@ -194,9 +228,13 @@ def list(self, request: operations.ListSyncsRequest, retries: Optional[utils.Ret client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -242,9 +280,13 @@ def request(self, request: operations.RequestSyncRequest, retries: Optional[util client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('POST', url, data=data, files=form, headers=headers) @@ -284,9 +326,13 @@ def request_for_date_range(self, request: operations.RequestSyncForDateRangeRequ client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('POST', url, data=data, files=form, headers=headers) diff --git a/sync-for-commerce/src/codatsynccommerce/sync_flow_preferences.py b/sync-for-commerce/src/codatsynccommerce/sync_flow_settings.py similarity index 87% rename from sync-for-commerce/src/codatsynccommerce/sync_flow_preferences.py rename to sync-for-commerce/src/codatsynccommerce/sync_flow_settings.py index a5b903b92..e9e36ce25 100755 --- a/sync-for-commerce/src/codatsynccommerce/sync_flow_preferences.py +++ b/sync-for-commerce/src/codatsynccommerce/sync_flow_settings.py @@ -5,7 +5,7 @@ from codatsynccommerce.models import errors, operations, shared from typing import Optional -class SyncFlowPreferences: +class SyncFlowSettings: r"""Configure preferences for any given Sync for Commerce company using sync flow.""" sdk_configuration: SDKConfiguration @@ -26,9 +26,13 @@ def get_config_text_sync_flow(self, retries: Optional[utils.RetryConfig] = None) client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -65,9 +69,13 @@ def get_visible_accounts(self, request: operations.GetVisibleAccountsRequest, re client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('GET', url, headers=headers) @@ -107,9 +115,13 @@ def update_config_text_sync_flow(self, request: dict[str, shared.Localization], client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('PATCH', url, data=data, files=form, headers=headers) @@ -149,9 +161,13 @@ def update_visible_accounts_sync_flow(self, request: operations.UpdateVisibleAcc client = self.sdk_configuration.security_client + global_retry_config = self.sdk_configuration.retry_config retry_config = retries if retry_config is None: - retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + if global_retry_config: + retry_config = global_retry_config + else: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) def do_request(): return client.request('POST', url, data=data, files=form, headers=headers) diff --git a/sync-for-commerce/src/codatsynccommerce/utils/utils.py b/sync-for-commerce/src/codatsynccommerce/utils/utils.py index ea9792d0d..05eafba6c 100755 --- a/sync-for-commerce/src/codatsynccommerce/utils/utils.py +++ b/sync-for-commerce/src/codatsynccommerce/utils/utils.py @@ -5,6 +5,7 @@ import re from dataclasses import Field, dataclass, 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, Optional, Tuple, Union, get_args, get_origin @@ -112,7 +113,8 @@ def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict, client.client.headers[header_name] = value elif scheme_type == 'http': if sub_type == 'bearer': - client.client.headers[header_name] = value.lower().startswith('bearer ') and value or f'Bearer {value}' + client.client.headers[header_name] = value.lower().startswith( + 'bearer ') and value or f'Bearer {value}' else: raise Exception('not supported') else: @@ -192,7 +194,7 @@ def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass f"{pp_key},{_val_to_string(param[pp_key])}") path = path.replace( '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) - elif not isinstance(param, (str, int, float, complex, bool)): + 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: @@ -235,7 +237,7 @@ def template_url(url_with_params: str, params: dict[str, str]) -> str: def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> dict[ - str, list[str]]: + str, list[str]]: params: dict[str, list[str]] = {} param_fields: Tuple[Field, ...] = fields(clazz) @@ -377,7 +379,7 @@ def _get_query_param_field_name(obj_field: Field) -> str: def _get_delimited_query_params(metadata: dict, field_name: str, obj: any, delimiter: str) -> dict[ - str, list[str]]: + str, list[str]]: return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name, delimiter) @@ -391,9 +393,9 @@ def _get_delimited_query_params(metadata: dict, field_name: str, obj: any, delim def serialize_request_body(request: dataclass, request_field_name: str, serialization_method: str) -> Tuple[ - str, any, any]: + str, any, any]: if request is None: - return None, None, None, None + return None, None, None if not is_dataclass(request) or not hasattr(request, request_field_name): return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], @@ -486,7 +488,7 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, def serialize_dict(original: dict, explode: bool, field_name, existing: Optional[dict[str, list[str]]]) -> dict[ - str, list[str]]: + str, list[str]]: if existing is None: existing = [] @@ -604,7 +606,8 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f items.append(_val_to_string(value)) if len(items) > 0: - params[field_name] = [delimiter.join([str(item) for item in items])] + params[field_name] = [delimiter.join( + [str(item) for item in items])] else: params[field_name] = [_val_to_string(obj)] @@ -681,7 +684,8 @@ def unmarshal_json(data, typ): try: out = unmarshal.from_dict({"res": json_dict}) except AttributeError as attr_err: - raise AttributeError(f'unable to unmarshal {data} as {typ}') from attr_err + raise AttributeError( + f'unable to unmarshal {data} as {typ}') from attr_err return out.res @@ -734,6 +738,36 @@ def datefromisoformat(date_str: str): return dateutil.parser.parse(date_str).date() +def bigintencoder(optional: bool): + def bigintencode(val: int): + if optional and val is None: + return None + return str(val) + + return bigintencode + + +def bigintdecoder(val): + return int(val) + + +def decimalencoder(optional: bool, as_str: bool): + def decimalencode(val: Decimal): + if optional and val is None: + return None + + if as_str: + return str(val) + + return float(val) + + return decimalencode + + +def decimaldecoder(val): + return Decimal(str(val)) + + def get_field_name(name): def override(_, _field_name=name): return _field_name