diff --git a/sync-for-expenses/README.md b/sync-for-expenses/README.md index 41a9ebcc2..17fa8fa67 100755 --- a/sync-for-expenses/README.md +++ b/sync-for-expenses/README.md @@ -3,15 +3,142 @@ Embedded accounting integrations for corporate card providers. -replace me +## SDK Installation + +```bash +pip install codat-sync-for-expenses +``` ## Example Usage -replace me + + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared +from decimal import Decimal + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.CreateAccountRequest( + account=shared.Account( + currency='USD', + current_balance=Decimal('0'), + description='Invoices the business has issued but has not yet collected payment on.', + fully_qualified_category='Asset.Current', + fully_qualified_name='Fixed Asset', + id='1b6266d1-1e44-46c5-8eb5-a8f98e03124e', + is_bank_account=False, + metadata=shared.AccountMetadata( + is_deleted=False, + ), + modified_date='2022-10-23T00:00:00.000Z', + name='Accounts Receivable', + nominal_code='610', + source_modified_date='2022-10-23T00:00:00.000Z', + status=shared.AccountStatus.ACTIVE, + type=shared.AccountType.ASSET, + valid_datatype_links=[ + shared.AccountValidDataTypeLinks( + links=[ + 'unde', + ], + property='nulla', + ), + ], + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', + timeout_in_minutes=544883, +) + +res = s.accounts.create(req) + +if res.create_account_response is not None: + # handle response +``` -replace me +## Available Resources and Operations + + +### [accounts](docs/sdks/accounts/README.md) + +* [create](docs/sdks/accounts/README.md#create) - Create account + +### [companies](docs/sdks/companies/README.md) + +* [create](docs/sdks/companies/README.md#create) - Create company +* [delete](docs/sdks/companies/README.md#delete) - Delete a company +* [get](docs/sdks/companies/README.md#get) - Get company +* [list](docs/sdks/companies/README.md#list) - List companies +* [update](docs/sdks/companies/README.md#update) - Update company + +### [configuration](docs/sdks/configuration/README.md) + +* [get](docs/sdks/configuration/README.md#get) - Get company configuration +* [get_mapping_options](docs/sdks/configuration/README.md#get_mapping_options) - Mapping options +* [set](docs/sdks/configuration/README.md#set) - Set company configuration + +### [connections](docs/sdks/connections/README.md) + +* [create](docs/sdks/connections/README.md#create) - Create connection +* [create_partner_expense_connection](docs/sdks/connections/README.md#create_partner_expense_connection) - Create Partner Expense connection +* [delete](docs/sdks/connections/README.md#delete) - Delete connection +* [get](docs/sdks/connections/README.md#get) - Get connection +* [list](docs/sdks/connections/README.md#list) - List connections +* [unlink](docs/sdks/connections/README.md#unlink) - Unlink connection + +### [customers](docs/sdks/customers/README.md) + +* [create](docs/sdks/customers/README.md#create) - Create customer +* [get](docs/sdks/customers/README.md#get) - Get customer +* [list](docs/sdks/customers/README.md#list) - List customers +* [update](docs/sdks/customers/README.md#update) - Update customer + +### [expenses](docs/sdks/expenses/README.md) + +* [create](docs/sdks/expenses/README.md#create) - Create expense transaction +* [update](docs/sdks/expenses/README.md#update) - Update expense-transactions +* [upload_attachment](docs/sdks/expenses/README.md#upload_attachment) - Upload attachment + +### [manage_data](docs/sdks/managedata/README.md) + +* [get](docs/sdks/managedata/README.md#get) - Get data status +* [get_pull_operation](docs/sdks/managedata/README.md#get_pull_operation) - Get pull operation +* [list_pull_operations](docs/sdks/managedata/README.md#list_pull_operations) - List pull operations +* [refresh_all_data_types](docs/sdks/managedata/README.md#refresh_all_data_types) - Refresh all data +* [refresh_data_type](docs/sdks/managedata/README.md#refresh_data_type) - Refresh data type + +### [push_operations](docs/sdks/pushoperations/README.md) + +* [get](docs/sdks/pushoperations/README.md#get) - Get push operation +* [list](docs/sdks/pushoperations/README.md#list) - List push operations + +### [suppliers](docs/sdks/suppliers/README.md) + +* [create](docs/sdks/suppliers/README.md#create) - Create supplier +* [get](docs/sdks/suppliers/README.md#get) - Get supplier +* [list](docs/sdks/suppliers/README.md#list) - List suppliers +* [update](docs/sdks/suppliers/README.md#update) - Update supplier + +### [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 +* [initiate_sync](docs/sdks/sync/README.md#initiate_sync) - Initiate sync +* [list](docs/sdks/sync/README.md#list) - List sync statuses + +### [transaction_status](docs/sdks/transactionstatus/README.md) + +* [get](docs/sdks/transactionstatus/README.md#get) - Get Sync Transaction +* [list](docs/sdks/transactionstatus/README.md#list) - List sync transactions ### Library generated by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks) diff --git a/sync-for-expenses/RELEASES.md b/sync-for-expenses/RELEASES.md index 6e3a865af..a94e8194f 100644 --- a/sync-for-expenses/RELEASES.md +++ b/sync-for-expenses/RELEASES.md @@ -626,4 +626,14 @@ Based on: ### Generated - [python v0.35.0] sync-for-expenses ### Releases -- [PyPI v0.35.0] https://pypi.org/project/codat-sync-for-expenses/0.35.0 - sync-for-expenses \ No newline at end of file +- [PyPI v0.35.0] https://pypi.org/project/codat-sync-for-expenses/0.35.0 - sync-for-expenses + +## 2023-09-13 11:31:04 +### Changes +Based on: +- OpenAPI Doc prealpha https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Sync-Expenses.yaml +- Speakeasy CLI 1.82.5 (2.108.3) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.0] sync-for-expenses +### Releases +- [PyPI v1.1.0] https://pypi.org/project/codat-sync-for-expenses/1.1.0 - sync-for-expenses \ No newline at end of file diff --git a/sync-for-expenses/USAGE.md b/sync-for-expenses/USAGE.md index e0647ad31..27a09d8ec 100755 --- a/sync-for-expenses/USAGE.md +++ b/sync-for-expenses/USAGE.md @@ -4,6 +4,7 @@ ```python import codatsyncexpenses from codatsyncexpenses.models import operations, shared +from decimal import Decimal s = codatsyncexpenses.CodatSyncExpenses( security=shared.Security( @@ -14,7 +15,7 @@ s = codatsyncexpenses.CodatSyncExpenses( req = operations.CreateAccountRequest( account=shared.Account( currency='USD', - current_balance=0, + current_balance=Decimal('0'), description='Invoices the business has issued but has not yet collected payment on.', fully_qualified_category='Asset.Current', fully_qualified_name='Fixed Asset', @@ -32,31 +33,15 @@ req = operations.CreateAccountRequest( valid_datatype_links=[ shared.AccountValidDataTypeLinks( links=[ - 'corrupti', - 'illum', - 'vel', - 'error', + 'unde', ], - property='deserunt', - ), - shared.AccountValidDataTypeLinks( - links=[ - 'iure', - 'magnam', - ], - property='debitis', - ), - shared.AccountValidDataTypeLinks( - links=[ - 'delectus', - ], - property='tempora', + property='nulla', ), ], ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', - timeout_in_minutes=383441, + timeout_in_minutes=544883, ) res = s.accounts.create(req) diff --git a/sync-for-expenses/docs/models/operations/unlinkconnectionrequest.md b/sync-for-expenses/docs/models/operations/unlinkconnectionrequest.md index 2ed1d78dc..d20863dce 100755 --- a/sync-for-expenses/docs/models/operations/unlinkconnectionrequest.md +++ b/sync-for-expenses/docs/models/operations/unlinkconnectionrequest.md @@ -3,8 +3,8 @@ ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| `request_body` | [Optional[UnlinkConnectionRequestBody]](../../models/operations/unlinkconnectionrequestbody.md) | :heavy_minus_sign: | N/A | | -| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | -| `connection_id` | *str* | :heavy_check_mark: | N/A | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| `request_body` | [Optional[UnlinkConnectionUpdateConnection]](../../models/operations/unlinkconnectionupdateconnection.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `connection_id` | *str* | :heavy_check_mark: | N/A | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | \ No newline at end of file diff --git a/sync-for-expenses/docs/models/operations/unlinkconnectionrequestbody.md b/sync-for-expenses/docs/models/operations/unlinkconnectionrequestbody.md deleted file mode 100755 index 276bf1330..000000000 --- a/sync-for-expenses/docs/models/operations/unlinkconnectionrequestbody.md +++ /dev/null @@ -1,8 +0,0 @@ -# UnlinkConnectionRequestBody - - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `status` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/sync-for-expenses/docs/models/operations/unlinkconnectionupdateconnection.md b/sync-for-expenses/docs/models/operations/unlinkconnectionupdateconnection.md new file mode 100755 index 000000000..5a5f2911b --- /dev/null +++ b/sync-for-expenses/docs/models/operations/unlinkconnectionupdateconnection.md @@ -0,0 +1,8 @@ +# UnlinkConnectionUpdateConnection + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `status` | [Optional[shared.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-expenses/docs/models/shared/account.md b/sync-for-expenses/docs/models/shared/account.md index bb1d27e3d..c11ac46f7 100755 --- a/sync-for-expenses/docs/models/shared/account.md +++ b/sync-for-expenses/docs/models/shared/account.md @@ -35,7 +35,7 @@ To determine the list of allowed categories for a specific integration, you can: | Field | Type | Required | Description | Example | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `currency` | *Optional[str]* | :heavy_minus_sign: | The currency data type in Codat is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, e.g. _GBP_.

## Unknown currencies

In line with the ISO 4217 specification, the code _XXX_ is used when the data source does not return a currency for a transaction.

There are only a very small number of edge cases where this currency code is returned by the Codat system. | GBP | -| `current_balance` | *Optional[float]* | :heavy_minus_sign: | Current balance in the account. | 0 | +| `current_balance` | *Optional[Decimal]* | :heavy_minus_sign: | Current balance in the account. | 0 | | `description` | *Optional[str]* | :heavy_minus_sign: | Description for the account. | Invoices the business has issued but has not yet collected payment on. | | `fully_qualified_category` | *Optional[str]* | :heavy_minus_sign: | Full category of the account.

For example, `Liability.Current` or `Income.Revenue`. To determine a list of possible categories for each integration, see our examples, follow our [Create, update, delete data](https://docs.codat.io/using-the-api/push) guide, or refer to the integration's own documentation. | Asset.Current | | `fully_qualified_name` | *Optional[str]* | :heavy_minus_sign: | Full name of the account, for example:
- `Cash On Hand`
- `Rents Held In Trust`
- `Fixed Asset` | Cash On Hand | diff --git a/sync-for-expenses/docs/models/shared/attachment.md b/sync-for-expenses/docs/models/shared/attachment.md index e5fb39141..1248b8574 100755 --- a/sync-for-expenses/docs/models/shared/attachment.md +++ b/sync-for-expenses/docs/models/shared/attachment.md @@ -1,7 +1,5 @@ # Attachment -OK - ## Fields diff --git a/sync-for-expenses/docs/models/shared/companies.md b/sync-for-expenses/docs/models/shared/companies.md index 621899fbb..c4c6e0399 100755 --- a/sync-for-expenses/docs/models/shared/companies.md +++ b/sync-for-expenses/docs/models/shared/companies.md @@ -1,7 +1,5 @@ # Companies -OK - ## Fields diff --git a/sync-for-expenses/docs/models/shared/companyconfiguration.md b/sync-for-expenses/docs/models/shared/companyconfiguration.md index e0678c642..4d18d7507 100755 --- a/sync-for-expenses/docs/models/shared/companyconfiguration.md +++ b/sync-for-expenses/docs/models/shared/companyconfiguration.md @@ -1,7 +1,5 @@ # CompanyConfiguration -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/companysyncstatus.md b/sync-for-expenses/docs/models/shared/companysyncstatus.md index a3d6dcb4b..564dc44df 100755 --- a/sync-for-expenses/docs/models/shared/companysyncstatus.md +++ b/sync-for-expenses/docs/models/shared/companysyncstatus.md @@ -1,7 +1,5 @@ # CompanySyncStatus -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/connections.md b/sync-for-expenses/docs/models/shared/connections.md index ba1135508..d9a1a748e 100755 --- a/sync-for-expenses/docs/models/shared/connections.md +++ b/sync-for-expenses/docs/models/shared/connections.md @@ -1,7 +1,5 @@ # Connections -OK - ## Fields diff --git a/sync-for-expenses/docs/models/shared/createaccountresponse.md b/sync-for-expenses/docs/models/shared/createaccountresponse.md index 5c85a35eb..0b96d3a90 100755 --- a/sync-for-expenses/docs/models/shared/createaccountresponse.md +++ b/sync-for-expenses/docs/models/shared/createaccountresponse.md @@ -1,7 +1,5 @@ # CreateAccountResponse -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/createcustomerresponse.md b/sync-for-expenses/docs/models/shared/createcustomerresponse.md index 8c95f641d..f92d0c99a 100755 --- a/sync-for-expenses/docs/models/shared/createcustomerresponse.md +++ b/sync-for-expenses/docs/models/shared/createcustomerresponse.md @@ -1,7 +1,5 @@ # CreateCustomerResponse -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/createexpenseresponse.md b/sync-for-expenses/docs/models/shared/createexpenseresponse.md index e4aeb38ba..8278ec84b 100755 --- a/sync-for-expenses/docs/models/shared/createexpenseresponse.md +++ b/sync-for-expenses/docs/models/shared/createexpenseresponse.md @@ -1,7 +1,5 @@ # CreateExpenseResponse -OK - ## Fields diff --git a/sync-for-expenses/docs/models/shared/createsupplierresponse.md b/sync-for-expenses/docs/models/shared/createsupplierresponse.md index e99c86e0b..83a1b4acb 100755 --- a/sync-for-expenses/docs/models/shared/createsupplierresponse.md +++ b/sync-for-expenses/docs/models/shared/createsupplierresponse.md @@ -1,7 +1,5 @@ # CreateSupplierResponse -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/customer.md b/sync-for-expenses/docs/models/shared/customer.md index f17ce0874..7ccd3cf07 100755 --- a/sync-for-expenses/docs/models/shared/customer.md +++ b/sync-for-expenses/docs/models/shared/customer.md @@ -1,7 +1,5 @@ # Customer -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/customers.md b/sync-for-expenses/docs/models/shared/customers.md index c71d6dc21..eebee2b84 100755 --- a/sync-for-expenses/docs/models/shared/customers.md +++ b/sync-for-expenses/docs/models/shared/customers.md @@ -1,7 +1,5 @@ # Customers -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/errormessage.md b/sync-for-expenses/docs/models/shared/errormessage.md index b32400646..4f34c9a64 100755 --- a/sync-for-expenses/docs/models/shared/errormessage.md +++ b/sync-for-expenses/docs/models/shared/errormessage.md @@ -1,7 +1,5 @@ # ErrorMessage -Your `query` parameter was not correctly formed - ## Fields diff --git a/sync-for-expenses/docs/models/shared/expensetransaction.md b/sync-for-expenses/docs/models/shared/expensetransaction.md index db0cdd865..f51e614e6 100755 --- a/sync-for-expenses/docs/models/shared/expensetransaction.md +++ b/sync-for-expenses/docs/models/shared/expensetransaction.md @@ -8,7 +8,7 @@ | `bank_account_ref` | [Optional[ExpenseTransactionBankAccountReference]](../../models/shared/expensetransactionbankaccountreference.md) | :heavy_minus_sign: | N/A | | | `contact_ref` | [Optional[ContactRef]](../../models/shared/contactref.md) | :heavy_minus_sign: | N/A | | | `currency` | *str* | :heavy_check_mark: | Currency the transaction was recorded in. | GBP | -| `currency_rate` | *Optional[float]* | :heavy_minus_sign: | Rate to convert the total amount of the payment into the base currency for the company at the time of the payment.

Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit.

It is not possible to perform the currency conversion with two or more non-base currencies participating in the transaction. For example, if a company's base currency is USD, and it has a bill issued in EUR, then the bill payment must happen in USD or EUR.

Where the currency rate is provided by the underlying accounting platform, it will be available from Codat with the same precision (up to a maximum of 9 decimal places).

For accounting platforms which do not provide an explicit currency rate, it is calculated as `baseCurrency / foreignCurrency` and will be returned to 9 decimal places.

## Examples with base currency of GBP

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (GBP) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **USD** \| $20 \| 0.781 \| £15.62 \|
\| **EUR** \| €20 \| 0.885 \| £17.70 \|
\| **RUB** \| ₽20 \| 0.011 \| £0.22 \|

## Examples with base currency of USD

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (USD) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **GBP** \| £20 \| 1.277 \| $25.54 \|
\| **EUR** \| €20 \| 1.134 \| $22.68 \|
\| **RUB** \| ₽20 \| 0.015 \| $0.30 \| | | +| `currency_rate` | *Optional[Decimal]* | :heavy_minus_sign: | Rate to convert the total amount of the payment into the base currency for the company at the time of the payment.

Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit.

It is not possible to perform the currency conversion with two or more non-base currencies participating in the transaction. For example, if a company's base currency is USD, and it has a bill issued in EUR, then the bill payment must happen in USD or EUR.

Where the currency rate is provided by the underlying accounting platform, it will be available from Codat with the same precision (up to a maximum of 9 decimal places).

For accounting platforms which do not provide an explicit currency rate, it is calculated as `baseCurrency / foreignCurrency` and will be returned to 9 decimal places.

## Examples with base currency of GBP

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (GBP) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **USD** \| $20 \| 0.781 \| £15.62 \|
\| **EUR** \| €20 \| 0.885 \| £17.70 \|
\| **RUB** \| ₽20 \| 0.011 \| £0.22 \|

## Examples with base currency of USD

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (USD) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **GBP** \| £20 \| 1.277 \| $25.54 \|
\| **EUR** \| €20 \| 1.134 \| $22.68 \|
\| **RUB** \| ₽20 \| 0.015 \| $0.30 \| | | | `id` | *str* | :heavy_check_mark: | Your unique identifier for the transaction. | 4d7c6929-7770-412b-91bb-44d3bc71d111 | | `issue_date` | *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-23T00:00:00.000Z | | `lines` | list[[ExpenseTransactionLine](../../models/shared/expensetransactionline.md)] | :heavy_minus_sign: | Array of transaction lines. | | diff --git a/sync-for-expenses/docs/models/shared/expensetransactionline.md b/sync-for-expenses/docs/models/shared/expensetransactionline.md index 7715b7de9..cb23aeaa1 100755 --- a/sync-for-expenses/docs/models/shared/expensetransactionline.md +++ b/sync-for-expenses/docs/models/shared/expensetransactionline.md @@ -6,7 +6,7 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | | `account_ref` | [RecordRef](../../models/shared/recordref.md) | :heavy_check_mark: | N/A | | -| `net_amount` | *float* | :heavy_check_mark: | Amount of the line, exclusive of tax. | 110.42 | -| `tax_amount` | *float* | :heavy_check_mark: | Amount of tax for the line. | 14.43 | +| `net_amount` | *Decimal* | :heavy_check_mark: | Amount of the line, exclusive of tax. | 110.42 | +| `tax_amount` | *Decimal* | :heavy_check_mark: | Amount of tax for the line. | 14.43 | | `tax_rate_ref` | [Optional[RecordRef]](../../models/shared/recordref.md) | :heavy_minus_sign: | N/A | | | `tracking_refs` | list[[RecordRef](../../models/shared/recordref.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/sync-for-expenses/docs/models/shared/mappingoptions.md b/sync-for-expenses/docs/models/shared/mappingoptions.md index 98fc50f93..7cdf63389 100755 --- a/sync-for-expenses/docs/models/shared/mappingoptions.md +++ b/sync-for-expenses/docs/models/shared/mappingoptions.md @@ -1,7 +1,5 @@ # MappingOptions -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/pulloperations.md b/sync-for-expenses/docs/models/shared/pulloperations.md index 497d66e3f..afe4f6f90 100755 --- a/sync-for-expenses/docs/models/shared/pulloperations.md +++ b/sync-for-expenses/docs/models/shared/pulloperations.md @@ -1,7 +1,5 @@ # PullOperations -OK - ## Fields diff --git a/sync-for-expenses/docs/models/shared/pushoperation.md b/sync-for-expenses/docs/models/shared/pushoperation.md index b90de2409..8537a2c10 100755 --- a/sync-for-expenses/docs/models/shared/pushoperation.md +++ b/sync-for-expenses/docs/models/shared/pushoperation.md @@ -1,7 +1,5 @@ # PushOperation -OK - ## Fields diff --git a/sync-for-expenses/docs/models/shared/pushoperations.md b/sync-for-expenses/docs/models/shared/pushoperations.md index 4967d37e5..83fd674fe 100755 --- a/sync-for-expenses/docs/models/shared/pushoperations.md +++ b/sync-for-expenses/docs/models/shared/pushoperations.md @@ -1,7 +1,5 @@ # PushOperations -OK - ## Fields diff --git a/sync-for-expenses/docs/models/shared/supplier.md b/sync-for-expenses/docs/models/shared/supplier.md index 376193871..5131731ce 100755 --- a/sync-for-expenses/docs/models/shared/supplier.md +++ b/sync-for-expenses/docs/models/shared/supplier.md @@ -1,7 +1,5 @@ # Supplier -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/suppliers.md b/sync-for-expenses/docs/models/shared/suppliers.md index 88c7249aa..2c8d57400 100755 --- a/sync-for-expenses/docs/models/shared/suppliers.md +++ b/sync-for-expenses/docs/models/shared/suppliers.md @@ -1,7 +1,5 @@ # Suppliers -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/syncinitiated.md b/sync-for-expenses/docs/models/shared/syncinitiated.md index e10f210a8..8cd67fcc0 100755 --- a/sync-for-expenses/docs/models/shared/syncinitiated.md +++ b/sync-for-expenses/docs/models/shared/syncinitiated.md @@ -1,7 +1,5 @@ # SyncInitiated -Returns the newly created SyncId - ## Fields diff --git a/sync-for-expenses/docs/models/shared/taxratemappinginfo.md b/sync-for-expenses/docs/models/shared/taxratemappinginfo.md index 7652d90b5..7719a6865 100755 --- a/sync-for-expenses/docs/models/shared/taxratemappinginfo.md +++ b/sync-for-expenses/docs/models/shared/taxratemappinginfo.md @@ -6,8 +6,8 @@ | Field | Type | Required | Description | Example | | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | | `code` | *Optional[str]* | :heavy_minus_sign: | Code for the tax rate from the accounting platform. | UK Standard Rate (Bills) | -| `effective_tax_rate` | *Optional[float]* | :heavy_minus_sign: | Effective tax rate. | 20 | +| `effective_tax_rate` | *Optional[Decimal]* | :heavy_minus_sign: | Effective tax rate. | 20 | | `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of tax rate. | 59_Bills | | `name` | *Optional[str]* | :heavy_minus_sign: | Name of the tax rate in the accounting platform. | UK Standard Rate (Bills) Bills | -| `total_tax_rate` | *Optional[float]* | :heavy_minus_sign: | Total (not compounded) sum of the components of a tax rate. | 20 | +| `total_tax_rate` | *Optional[Decimal]* | :heavy_minus_sign: | Total (not compounded) sum of the components of a tax rate. | 20 | | `valid_transaction_types` | list[[TaxRateMappingInfoValidTransactionTypes](../../models/shared/taxratemappinginfovalidtransactiontypes.md)] | :heavy_minus_sign: | Supported transaction types for the account. | | \ No newline at end of file diff --git a/sync-for-expenses/docs/models/shared/transaction.md b/sync-for-expenses/docs/models/shared/transaction.md index cf2d19802..fa152f224 100755 --- a/sync-for-expenses/docs/models/shared/transaction.md +++ b/sync-for-expenses/docs/models/shared/transaction.md @@ -1,7 +1,5 @@ # Transaction -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/transactions.md b/sync-for-expenses/docs/models/shared/transactions.md index 703ac0c4b..6b1062337 100755 --- a/sync-for-expenses/docs/models/shared/transactions.md +++ b/sync-for-expenses/docs/models/shared/transactions.md @@ -1,7 +1,5 @@ # Transactions -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/updatecustomerresponse.md b/sync-for-expenses/docs/models/shared/updatecustomerresponse.md index be0dd843f..e1f4c3357 100755 --- a/sync-for-expenses/docs/models/shared/updatecustomerresponse.md +++ b/sync-for-expenses/docs/models/shared/updatecustomerresponse.md @@ -1,7 +1,5 @@ # UpdateCustomerResponse -Success - ## Fields diff --git a/sync-for-expenses/docs/models/shared/updateexpenserequest.md b/sync-for-expenses/docs/models/shared/updateexpenserequest.md index c7c6dcc21..624f3fb06 100755 --- a/sync-for-expenses/docs/models/shared/updateexpenserequest.md +++ b/sync-for-expenses/docs/models/shared/updateexpenserequest.md @@ -8,7 +8,7 @@ | `bank_account_ref` | [Optional[UpdateExpenseRequestBankAccountReference]](../../models/shared/updateexpenserequestbankaccountreference.md) | :heavy_minus_sign: | N/A | | | `contact_ref` | [Optional[ContactRef]](../../models/shared/contactref.md) | :heavy_minus_sign: | N/A | | | `currency` | *Optional[str]* | :heavy_minus_sign: | Currency the transaction was recorded in. | GBP | -| `currency_rate` | *Optional[float]* | :heavy_minus_sign: | Rate to convert the total amount of the payment into the base currency for the company at the time of the payment.

Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit.

It is not possible to perform the currency conversion with two or more non-base currencies participating in the transaction. For example, if a company's base currency is USD, and it has a bill issued in EUR, then the bill payment must happen in USD or EUR.

Where the currency rate is provided by the underlying accounting platform, it will be available from Codat with the same precision (up to a maximum of 9 decimal places).

For accounting platforms which do not provide an explicit currency rate, it is calculated as `baseCurrency / foreignCurrency` and will be returned to 9 decimal places.

## Examples with base currency of GBP

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (GBP) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **USD** \| $20 \| 0.781 \| £15.62 \|
\| **EUR** \| €20 \| 0.885 \| £17.70 \|
\| **RUB** \| ₽20 \| 0.011 \| £0.22 \|

## Examples with base currency of USD

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (USD) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **GBP** \| £20 \| 1.277 \| $25.54 \|
\| **EUR** \| €20 \| 1.134 \| $22.68 \|
\| **RUB** \| ₽20 \| 0.015 \| $0.30 \| | | +| `currency_rate` | *Optional[Decimal]* | :heavy_minus_sign: | Rate to convert the total amount of the payment into the base currency for the company at the time of the payment.

Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit.

It is not possible to perform the currency conversion with two or more non-base currencies participating in the transaction. For example, if a company's base currency is USD, and it has a bill issued in EUR, then the bill payment must happen in USD or EUR.

Where the currency rate is provided by the underlying accounting platform, it will be available from Codat with the same precision (up to a maximum of 9 decimal places).

For accounting platforms which do not provide an explicit currency rate, it is calculated as `baseCurrency / foreignCurrency` and will be returned to 9 decimal places.

## Examples with base currency of GBP

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (GBP) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **USD** \| $20 \| 0.781 \| £15.62 \|
\| **EUR** \| €20 \| 0.885 \| £17.70 \|
\| **RUB** \| ₽20 \| 0.011 \| £0.22 \|

## Examples with base currency of USD

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (USD) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **GBP** \| £20 \| 1.277 \| $25.54 \|
\| **EUR** \| €20 \| 1.134 \| $22.68 \|
\| **RUB** \| ₽20 \| 0.015 \| $0.30 \| | | | `issue_date` | *str* | :heavy_check_mark: | Date the transaction was recorded. | 2022-06-28T00:00:00.000Z | | `lines` | list[[ExpenseTransactionLine](../../models/shared/expensetransactionline.md)] | :heavy_minus_sign: | Array of transaction lines. | | | `merchant_name` | *Optional[str]* | :heavy_minus_sign: | Name of the merchant where the purchase took place | Amazon UK | diff --git a/sync-for-expenses/docs/models/shared/updateexpenseresponse.md b/sync-for-expenses/docs/models/shared/updateexpenseresponse.md index 5ed19a166..90325cb30 100755 --- a/sync-for-expenses/docs/models/shared/updateexpenseresponse.md +++ b/sync-for-expenses/docs/models/shared/updateexpenseresponse.md @@ -1,7 +1,5 @@ # UpdateExpenseResponse -Accepted - ## Fields diff --git a/sync-for-expenses/docs/models/shared/updatesupplierresponse.md b/sync-for-expenses/docs/models/shared/updatesupplierresponse.md index 9ecdcf0ea..47deae42e 100755 --- a/sync-for-expenses/docs/models/shared/updatesupplierresponse.md +++ b/sync-for-expenses/docs/models/shared/updatesupplierresponse.md @@ -1,7 +1,5 @@ # UpdateSupplierResponse -Success - ## Fields diff --git a/sync-for-expenses/docs/sdks/accounts/README.md b/sync-for-expenses/docs/sdks/accounts/README.md index c1d486188..30cacd54e 100755 --- a/sync-for-expenses/docs/sdks/accounts/README.md +++ b/sync-for-expenses/docs/sdks/accounts/README.md @@ -26,6 +26,7 @@ Check out our [coverage explorer](https://knowledge.codat.io/supported-features/ ```python import codatsyncexpenses from codatsyncexpenses.models import operations, shared +from decimal import Decimal s = codatsyncexpenses.CodatSyncExpenses( security=shared.Security( @@ -35,11 +36,11 @@ s = codatsyncexpenses.CodatSyncExpenses( req = operations.CreateAccountRequest( account=shared.Account( - currency='USD', - current_balance=0, + currency='EUR', + current_balance=Decimal('0'), description='Invoices the business has issued but has not yet collected payment on.', fully_qualified_category='Asset.Current', - fully_qualified_name='Fixed Asset', + fully_qualified_name='Cash On Hand', id='1b6266d1-1e44-46c5-8eb5-a8f98e03124e', is_bank_account=False, metadata=shared.AccountMetadata( @@ -54,24 +55,15 @@ req = operations.CreateAccountRequest( valid_datatype_links=[ shared.AccountValidDataTypeLinks( links=[ - 'nisi', - 'recusandae', - 'temporibus', + 'suscipit', ], - property='ab', - ), - shared.AccountValidDataTypeLinks( - links=[ - 'veritatis', - 'deserunt', - ], - property='perferendis', + property='iure', ), ], ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', - timeout_in_minutes=368241, + timeout_in_minutes=297534, ) res = s.accounts.create(req) diff --git a/sync-for-expenses/docs/sdks/codatsyncexpenses/README.md b/sync-for-expenses/docs/sdks/codatsyncexpenses/README.md index 134232b61..49de314d0 100755 --- a/sync-for-expenses/docs/sdks/codatsyncexpenses/README.md +++ b/sync-for-expenses/docs/sdks/codatsyncexpenses/README.md @@ -12,7 +12,7 @@ integrations with multiple accounting platforms through a standardized API. [See our OpenAPI spec](https://github.com/codatio/oas) - +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-expenses-v1-api#/). ### Available Operations diff --git a/sync-for-expenses/docs/sdks/companies/README.md b/sync-for-expenses/docs/sdks/companies/README.md index d5211f8b6..fea512c4b 100755 --- a/sync-for-expenses/docs/sdks/companies/README.md +++ b/sync-for-expenses/docs/sdks/companies/README.md @@ -155,7 +155,7 @@ req = operations.ListCompaniesRequest( order_by='-modifiedDate', page=1, page_size=100, - query='repellendus', + query='debitis', ) res = s.companies.list(req) diff --git a/sync-for-expenses/docs/sdks/connections/README.md b/sync-for-expenses/docs/sdks/connections/README.md index cf59028fb..8f4db593e 100755 --- a/sync-for-expenses/docs/sdks/connections/README.md +++ b/sync-for-expenses/docs/sdks/connections/README.md @@ -33,7 +33,7 @@ s = codatsyncexpenses.CodatSyncExpenses( req = operations.CreateConnectionRequest( request_body=operations.CreateConnectionRequestBody( - platform_key='sapiente', + platform_key='ipsa', ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', ) @@ -198,7 +198,7 @@ req = operations.ListConnectionsRequest( order_by='-modifiedDate', page=1, page_size=100, - query='quo', + query='delectus', ) res = s.connections.list(req) @@ -237,8 +237,8 @@ s = codatsyncexpenses.CodatSyncExpenses( ) req = operations.UnlinkConnectionRequest( - request_body=operations.UnlinkConnectionRequestBody( - status='odit', + request_body=operations.UnlinkConnectionUpdateConnection( + status=shared.DataConnectionStatus.LINKED, ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', diff --git a/sync-for-expenses/docs/sdks/customers/README.md b/sync-for-expenses/docs/sdks/customers/README.md index c29fc9433..fc5c3e3a8 100755 --- a/sync-for-expenses/docs/sdks/customers/README.md +++ b/sync-for-expenses/docs/sdks/customers/README.md @@ -42,7 +42,7 @@ req = operations.CreateCustomerRequest( ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', - timeout_in_minutes=870013, + timeout_in_minutes=383441, ) res = s.customers.create(req) @@ -89,7 +89,7 @@ s = codatsyncexpenses.CodatSyncExpenses( req = operations.GetCustomerRequest( company_id='8a210b68-6988-11ed-a1eb-0242ac120002', - customer_id='at', + customer_id='molestiae', ) res = s.customers.get(req) @@ -137,7 +137,7 @@ req = operations.ListCustomersRequest( order_by='-modifiedDate', page=1, page_size=100, - query='maiores', + query='minus', ) res = s.customers.list(req) @@ -190,9 +190,9 @@ req = operations.UpdateCustomerRequest( ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', - customer_id='molestiae', + customer_id='placeat', force_update=False, - timeout_in_minutes=799159, + timeout_in_minutes=528895, ) res = s.customers.update(req) diff --git a/sync-for-expenses/docs/sdks/expenses/README.md b/sync-for-expenses/docs/sdks/expenses/README.md index 576377d28..a7b9ff834 100755 --- a/sync-for-expenses/docs/sdks/expenses/README.md +++ b/sync-for-expenses/docs/sdks/expenses/README.md @@ -19,6 +19,7 @@ Create an expense transaction ```python import codatsyncexpenses from codatsyncexpenses.models import operations, shared +from decimal import Decimal s = codatsyncexpenses.CodatSyncExpenses( security=shared.Security( @@ -38,7 +39,7 @@ req = operations.CreateExpenseTransactionRequest( id='40e3e57c-2322-4898-966c-ca41adfd23fd', ), currency='GBP', - currency_rate=4614.79, + currency_rate=Decimal('4799.77'), id='4d7c6929-7770-412b-91bb-44d3bc71d111', issue_date='2022-10-23T00:00:00.000Z', lines=[ @@ -46,29 +47,8 @@ req = operations.CreateExpenseTransactionRequest( account_ref=shared.RecordRef( id='40e3e57c-2322-4898-966c-ca41adfd23fd', ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, + net_amount=Decimal('110.42'), + tax_amount=Decimal('14.43'), tax_rate_ref=shared.RecordRef( id='40e3e57c-2322-4898-966c-ca41adfd23fd', ), @@ -78,240 +58,6 @@ req = operations.CreateExpenseTransactionRequest( ), ], ), - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - ], - merchant_name='Amazon UK', - notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', - type=shared.ExpenseTransactionType.PAYMENT, - ), - shared.ExpenseTransaction( - bank_account_ref=shared.ExpenseTransactionBankAccountReference( - id='787dfb37-5707-4dc0-8a86-8d74e4cc78ea', - ), - contact_ref=shared.ContactRef( - contact_type=shared.ContactRefContactType.SUPPLIER, - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - currency='GBP', - currency_rate=5820.2, - id='4d7c6929-7770-412b-91bb-44d3bc71d111', - issue_date='2022-10-23T00:00:00.000Z', - lines=[ - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - ], - merchant_name='Amazon UK', - notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', - type=shared.ExpenseTransactionType.PAYMENT, - ), - shared.ExpenseTransaction( - bank_account_ref=shared.ExpenseTransactionBankAccountReference( - id='787dfb37-5707-4dc0-8a86-8d74e4cc78ea', - ), - contact_ref=shared.ContactRef( - contact_type=shared.ContactRefContactType.SUPPLIER, - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - currency='GBP', - currency_rate=1059.07, - id='4d7c6929-7770-412b-91bb-44d3bc71d111', - issue_date='2022-10-23T00:00:00.000Z', - lines=[ - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - ], - merchant_name='Amazon UK', - notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', - type=shared.ExpenseTransactionType.PAYMENT, - ), - shared.ExpenseTransaction( - bank_account_ref=shared.ExpenseTransactionBankAccountReference( - id='787dfb37-5707-4dc0-8a86-8d74e4cc78ea', - ), - contact_ref=shared.ContactRef( - contact_type=shared.ContactRefContactType.SUPPLIER, - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - currency='GBP', - currency_rate=7742.34, - id='4d7c6929-7770-412b-91bb-44d3bc71d111', - issue_date='2022-10-23T00:00:00.000Z', - lines=[ - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), - shared.ExpenseTransactionLine( - account_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - net_amount=110.42, - tax_amount=14.43, - tax_rate_ref=shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - tracking_refs=[ - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), - ], - ), ], merchant_name='Amazon UK', notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', @@ -350,6 +96,7 @@ Update an expense transaction ```python import codatsyncexpenses from codatsyncexpenses.models import operations, shared +from decimal import Decimal s = codatsyncexpenses.CodatSyncExpenses( security=shared.Security( @@ -367,15 +114,15 @@ req = operations.UpdateExpenseTransactionRequest( id='40e3e57c-2322-4898-966c-ca41adfd23fd', ), currency='GBP', - currency_rate=1352.18, + currency_rate=Decimal('3927.85'), issue_date='2022-06-28T00:00:00.000Z', lines=[ shared.ExpenseTransactionLine( account_ref=shared.RecordRef( id='40e3e57c-2322-4898-966c-ca41adfd23fd', ), - net_amount=110.42, - tax_amount=14.43, + net_amount=Decimal('110.42'), + tax_amount=Decimal('14.43'), tax_rate_ref=shared.RecordRef( id='40e3e57c-2322-4898-966c-ca41adfd23fd', ), @@ -383,15 +130,12 @@ req = operations.UpdateExpenseTransactionRequest( shared.RecordRef( id='40e3e57c-2322-4898-966c-ca41adfd23fd', ), - shared.RecordRef( - id='40e3e57c-2322-4898-966c-ca41adfd23fd', - ), ], ), ], merchant_name='Amazon UK', notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', - type='natus', + type='recusandae', ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', transaction_id='336694d8-2dca-4cb5-a28d-3ccb83e55eee', @@ -434,8 +178,8 @@ s = codatsyncexpenses.CodatSyncExpenses( req = operations.UploadExpenseAttachmentRequest( request_body=operations.UploadExpenseAttachmentRequestBody( - content='sed'.encode(), - request_body='iste', + content='temporibus'.encode(), + request_body='ab', ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', sync_id='6fb40d5e-b13e-11ed-afa1-0242ac120002', diff --git a/sync-for-expenses/docs/sdks/managedata/README.md b/sync-for-expenses/docs/sdks/managedata/README.md index 32dbf6b1d..e63887a90 100755 --- a/sync-for-expenses/docs/sdks/managedata/README.md +++ b/sync-for-expenses/docs/sdks/managedata/README.md @@ -112,7 +112,7 @@ req = operations.ListPullOperationsRequest( order_by='-modifiedDate', page=1, page_size=100, - query='dolor', + query='quis', ) res = s.manage_data.list_pull_operations(req) @@ -197,7 +197,7 @@ s = codatsyncexpenses.CodatSyncExpenses( req = operations.RefreshDataTypeRequest( company_id='8a210b68-6988-11ed-a1eb-0242ac120002', - connection_id='96fea759-6eb1-40fa-aa23-52c5955907af', + connection_id='1a05dfc2-ddf7-4cc7-8ca1-ba928fc81674', data_type=shared.DataType.INVOICES, ) diff --git a/sync-for-expenses/docs/sdks/pushoperations/README.md b/sync-for-expenses/docs/sdks/pushoperations/README.md index d3f876930..453e927f7 100755 --- a/sync-for-expenses/docs/sdks/pushoperations/README.md +++ b/sync-for-expenses/docs/sdks/pushoperations/README.md @@ -27,7 +27,7 @@ s = codatsyncexpenses.CodatSyncExpenses( req = operations.GetPushOperationRequest( company_id='8a210b68-6988-11ed-a1eb-0242ac120002', - push_operation_key='f1a3a2fa-9467-4739-a51a-a52c3f5ad019', + push_operation_key='2cb73920-5929-4396-bea7-596eb10faaa2', ) res = s.push_operations.get(req) @@ -70,7 +70,7 @@ req = operations.ListPushOperationsRequest( order_by='-modifiedDate', page=1, page_size=100, - query='temporibus', + query='dolorem', ) res = s.push_operations.list(req) diff --git a/sync-for-expenses/docs/sdks/suppliers/README.md b/sync-for-expenses/docs/sdks/suppliers/README.md index 9ef00d49f..b9d465a7c 100755 --- a/sync-for-expenses/docs/sdks/suppliers/README.md +++ b/sync-for-expenses/docs/sdks/suppliers/README.md @@ -42,7 +42,7 @@ req = operations.CreateSupplierRequest( ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', - timeout_in_minutes=673660, + timeout_in_minutes=358152, ) res = s.suppliers.create(req) @@ -137,7 +137,7 @@ req = operations.ListSuppliersRequest( order_by='-modifiedDate', page=1, page_size=100, - query='reiciendis', + query='nobis', ) res = s.suppliers.list(req) @@ -191,8 +191,8 @@ req = operations.UpdateSupplierRequest( company_id='8a210b68-6988-11ed-a1eb-0242ac120002', connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', force_update=False, - supplier_id='EILBDVJVNUAGVKRQ', - timeout_in_minutes=878194, + supplier_id='9wg4lep4ush5cxs79pl8sozmsndbaukll3ind4g7buqbm1h2', + timeout_in_minutes=607831, ) res = s.suppliers.update(req) diff --git a/sync-for-expenses/docs/sdks/sync/README.md b/sync-for-expenses/docs/sdks/sync/README.md index 74c43091c..ffc222ce5 100755 --- a/sync-for-expenses/docs/sdks/sync/README.md +++ b/sync-for-expenses/docs/sdks/sync/README.md @@ -149,8 +149,7 @@ s = codatsyncexpenses.CodatSyncExpenses( req = operations.InitiateSyncRequest( initiate_sync=shared.InitiateSync( dataset_ids=[ - '8f097b00-74f1-4547-9b5e-6e13b99d488e', - '1e91e450-ad2a-4bd4-8269-802d502a94bb', + '55907aff-1a3a-42fa-9467-739251aa52c3', ], ), company_id='8a210b68-6988-11ed-a1eb-0242ac120002', diff --git a/sync-for-expenses/files.gen b/sync-for-expenses/files.gen index 8226fa33c..9e78e688e 100755 --- a/sync-for-expenses/files.gen +++ b/sync-for-expenses/files.gen @@ -168,7 +168,7 @@ docs/models/operations/getconnectionrequest.md docs/models/operations/getconnectionresponse.md docs/models/operations/listconnectionsrequest.md docs/models/operations/listconnectionsresponse.md -docs/models/operations/unlinkconnectionrequestbody.md +docs/models/operations/unlinkconnectionupdateconnection.md docs/models/operations/unlinkconnectionrequest.md docs/models/operations/unlinkconnectionresponse.md docs/models/operations/createcustomerrequest.md diff --git a/sync-for-expenses/gen.yaml b/sync-for-expenses/gen.yaml index 0c5ab0d69..dc334d2b2 100644 --- a/sync-for-expenses/gen.yaml +++ b/sync-for-expenses/gen.yaml @@ -1,15 +1,24 @@ configVersion: 1.0.0 management: - docChecksum: 853aebc76021ec17db9b1abb7a33f340 - docVersion: 2.1.0 - speakeasyVersion: 1.53.0 - generationVersion: 2.58.0 + docChecksum: 99ebe2d8404dff82c77a51ebcd0892e8 + docVersion: prealpha + speakeasyVersion: 1.82.5 + generationVersion: 2.108.3 generation: sdkClassName: CodatSyncExpenses 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 expenses to accounting platforms. maxMethodParams: 0 diff --git a/sync-for-expenses/setup.py b/sync-for-expenses/setup.py index 85b209424..01af01557 100755 --- a/sync-for-expenses/setup.py +++ b/sync-for-expenses/setup.py @@ -10,7 +10,7 @@ setuptools.setup( name="codat-sync-for-expenses", - version="0.35.0", + version="1.1.0", author="Codat", description="Push expenses to accounting platforms.", long_description=long_description, diff --git a/sync-for-expenses/src/codatsyncexpenses/accounts.py b/sync-for-expenses/src/codatsyncexpenses/accounts.py index 7262b774b..e742a74cc 100755 --- a/sync-for-expenses/src/codatsyncexpenses/accounts.py +++ b/sync-for-expenses/src/codatsyncexpenses/accounts.py @@ -38,9 +38,13 @@ def create(self, request: operations.CreateAccountRequest, 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('POST', url, params=query_params, data=data, files=form, headers=headers) diff --git a/sync-for-expenses/src/codatsyncexpenses/companies.py b/sync-for-expenses/src/codatsyncexpenses/companies.py index 0ae8269af..ff95ace69 100755 --- a/sync-for-expenses/src/codatsyncexpenses/companies.py +++ b/sync-for-expenses/src/codatsyncexpenses/companies.py @@ -31,9 +31,13 @@ def create(self, request: shared.CompanyRequestBody, 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('POST', url, data=data, files=form, headers=headers) @@ -76,9 +80,13 @@ def delete(self, request: operations.DeleteCompanyRequest, 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('DELETE', url, headers=headers) @@ -117,9 +125,13 @@ def get(self, request: operations.GetCompanyRequest, 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) @@ -163,9 +175,13 @@ def list(self, request: operations.ListCompaniesRequest, 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('GET', url, params=query_params, headers=headers) @@ -211,9 +227,13 @@ def update(self, request: operations.UpdateCompanyRequest, 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('PUT', url, data=data, files=form, headers=headers) diff --git a/sync-for-expenses/src/codatsyncexpenses/configuration.py b/sync-for-expenses/src/codatsyncexpenses/configuration.py index bd95df771..c310658b4 100755 --- a/sync-for-expenses/src/codatsyncexpenses/configuration.py +++ b/sync-for-expenses/src/codatsyncexpenses/configuration.py @@ -26,9 +26,13 @@ def get(self, request: operations.GetCompanyConfigurationRequest, retries: Optio 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_mapping_options(self, request: operations.GetMappingOptionsRequest, retr 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) @@ -119,9 +127,13 @@ def set(self, request: operations.SetCompanyConfigurationRequest, retries: Optio 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-expenses/src/codatsyncexpenses/connections.py b/sync-for-expenses/src/codatsyncexpenses/connections.py index b3e0980dd..bc4af7d1d 100755 --- a/sync-for-expenses/src/codatsyncexpenses/connections.py +++ b/sync-for-expenses/src/codatsyncexpenses/connections.py @@ -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) @@ -76,9 +80,13 @@ def create_partner_expense_connection(self, request: operations.CreatePartnerExp 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) @@ -122,9 +130,13 @@ def delete(self, request: operations.DeleteConnectionRequest, 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('DELETE', url, headers=headers) @@ -163,9 +175,13 @@ def get(self, request: operations.GetConnectionRequest, 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('GET', url, headers=headers) @@ -209,9 +225,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) @@ -257,9 +277,13 @@ def unlink(self, request: operations.UnlinkConnectionRequest, 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('PATCH', url, data=data, files=form, headers=headers) diff --git a/sync-for-expenses/src/codatsyncexpenses/customers.py b/sync-for-expenses/src/codatsyncexpenses/customers.py index c872aa864..baf038cfe 100755 --- a/sync-for-expenses/src/codatsyncexpenses/customers.py +++ b/sync-for-expenses/src/codatsyncexpenses/customers.py @@ -38,9 +38,13 @@ def create(self, request: operations.CreateCustomerRequest, 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('POST', url, params=query_params, data=data, files=form, headers=headers) @@ -89,9 +93,13 @@ def get(self, request: operations.GetCustomerRequest, retries: Optional[utils.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) @@ -139,9 +147,13 @@ def list(self, request: operations.ListCustomersRequest, 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('GET', url, params=query_params, headers=headers) @@ -196,9 +208,13 @@ def update(self, request: operations.UpdateCustomerRequest, 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('PUT', url, params=query_params, data=data, files=form, headers=headers) diff --git a/sync-for-expenses/src/codatsyncexpenses/expenses.py b/sync-for-expenses/src/codatsyncexpenses/expenses.py index fff74d53b..81db18a3c 100755 --- a/sync-for-expenses/src/codatsyncexpenses/expenses.py +++ b/sync-for-expenses/src/codatsyncexpenses/expenses.py @@ -29,9 +29,13 @@ def create(self, request: operations.CreateExpenseTransactionRequest, retries: O 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) @@ -77,9 +81,13 @@ def update(self, request: operations.UpdateExpenseTransactionRequest, retries: O 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) @@ -125,9 +133,13 @@ def upload_attachment(self, request: operations.UploadExpenseAttachmentRequest, 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-expenses/src/codatsyncexpenses/manage_data.py b/sync-for-expenses/src/codatsyncexpenses/manage_data.py index d4b7f0e4d..cc58d39b4 100755 --- a/sync-for-expenses/src/codatsyncexpenses/manage_data.py +++ b/sync-for-expenses/src/codatsyncexpenses/manage_data.py @@ -26,9 +26,13 @@ def get(self, request: operations.GetDataStatusRequest, 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('GET', url, headers=headers) @@ -71,9 +75,13 @@ def get_pull_operation(self, request: operations.GetPullOperationRequest, 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) @@ -117,9 +125,13 @@ def list_pull_operations(self, request: operations.ListPullOperationsRequest, 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, params=query_params, headers=headers) @@ -166,9 +178,13 @@ def refresh_all_data_types(self, request: operations.RefreshAllDataTypesRequest, 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) @@ -210,9 +226,13 @@ def refresh_data_type(self, request: operations.RefreshDataTypeRequest, 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, params=query_params, headers=headers) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/operations/__init__.py b/sync-for-expenses/src/codatsyncexpenses/models/operations/__init__.py index 4082aab3b..577491d2d 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/operations/__init__.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/operations/__init__.py @@ -41,4 +41,4 @@ from .update_supplier import * from .upload_expense_attachment import * -__all__ = ["CreateAccountRequest","CreateAccountResponse","CreateCompanyResponse","CreateConnectionRequest","CreateConnectionRequestBody","CreateConnectionResponse","CreateCustomerRequest","CreateCustomerResponse","CreateExpenseTransactionRequest","CreateExpenseTransactionResponse","CreatePartnerExpenseConnectionRequest","CreatePartnerExpenseConnectionResponse","CreateSupplierRequest","CreateSupplierResponse","DeleteCompanyRequest","DeleteCompanyResponse","DeleteConnectionRequest","DeleteConnectionResponse","GetCompanyConfigurationRequest","GetCompanyConfigurationResponse","GetCompanyRequest","GetCompanyResponse","GetConnectionRequest","GetConnectionResponse","GetCustomerRequest","GetCustomerResponse","GetDataStatusRequest","GetDataStatusResponse","GetLastSuccessfulSyncRequest","GetLastSuccessfulSyncResponse","GetLatestSyncRequest","GetLatestSyncResponse","GetMappingOptionsRequest","GetMappingOptionsResponse","GetPullOperationRequest","GetPullOperationResponse","GetPushOperationRequest","GetPushOperationResponse","GetSupplierRequest","GetSupplierResponse","GetSyncByIDRequest","GetSyncByIDResponse","GetSyncTransactionRequest","GetSyncTransactionResponse","InitiateSyncRequest","InitiateSyncResponse","ListCompaniesRequest","ListCompaniesResponse","ListConnectionsRequest","ListConnectionsResponse","ListCustomersRequest","ListCustomersResponse","ListPullOperationsRequest","ListPullOperationsResponse","ListPushOperationsRequest","ListPushOperationsResponse","ListSuppliersRequest","ListSuppliersResponse","ListSyncTransactionsRequest","ListSyncTransactionsResponse","ListSyncsRequest","ListSyncsResponse","RefreshAllDataTypesRequest","RefreshAllDataTypesResponse","RefreshDataTypeRequest","RefreshDataTypeResponse","SetCompanyConfigurationRequest","SetCompanyConfigurationResponse","UnlinkConnectionRequest","UnlinkConnectionRequestBody","UnlinkConnectionResponse","UpdateCompanyRequest","UpdateCompanyResponse","UpdateCustomerRequest","UpdateCustomerResponse","UpdateExpenseTransactionRequest","UpdateExpenseTransactionResponse","UpdateSupplierRequest","UpdateSupplierResponse","UploadExpenseAttachmentRequest","UploadExpenseAttachmentRequestBody","UploadExpenseAttachmentResponse"] +__all__ = ["CreateAccountRequest","CreateAccountResponse","CreateCompanyResponse","CreateConnectionRequest","CreateConnectionRequestBody","CreateConnectionResponse","CreateCustomerRequest","CreateCustomerResponse","CreateExpenseTransactionRequest","CreateExpenseTransactionResponse","CreatePartnerExpenseConnectionRequest","CreatePartnerExpenseConnectionResponse","CreateSupplierRequest","CreateSupplierResponse","DeleteCompanyRequest","DeleteCompanyResponse","DeleteConnectionRequest","DeleteConnectionResponse","GetCompanyConfigurationRequest","GetCompanyConfigurationResponse","GetCompanyRequest","GetCompanyResponse","GetConnectionRequest","GetConnectionResponse","GetCustomerRequest","GetCustomerResponse","GetDataStatusRequest","GetDataStatusResponse","GetLastSuccessfulSyncRequest","GetLastSuccessfulSyncResponse","GetLatestSyncRequest","GetLatestSyncResponse","GetMappingOptionsRequest","GetMappingOptionsResponse","GetPullOperationRequest","GetPullOperationResponse","GetPushOperationRequest","GetPushOperationResponse","GetSupplierRequest","GetSupplierResponse","GetSyncByIDRequest","GetSyncByIDResponse","GetSyncTransactionRequest","GetSyncTransactionResponse","InitiateSyncRequest","InitiateSyncResponse","ListCompaniesRequest","ListCompaniesResponse","ListConnectionsRequest","ListConnectionsResponse","ListCustomersRequest","ListCustomersResponse","ListPullOperationsRequest","ListPullOperationsResponse","ListPushOperationsRequest","ListPushOperationsResponse","ListSuppliersRequest","ListSuppliersResponse","ListSyncTransactionsRequest","ListSyncTransactionsResponse","ListSyncsRequest","ListSyncsResponse","RefreshAllDataTypesRequest","RefreshAllDataTypesResponse","RefreshDataTypeRequest","RefreshDataTypeResponse","SetCompanyConfigurationRequest","SetCompanyConfigurationResponse","UnlinkConnectionRequest","UnlinkConnectionResponse","UnlinkConnectionUpdateConnection","UpdateCompanyRequest","UpdateCompanyResponse","UpdateCustomerRequest","UpdateCustomerResponse","UpdateExpenseTransactionRequest","UpdateExpenseTransactionResponse","UpdateSupplierRequest","UpdateSupplierResponse","UploadExpenseAttachmentRequest","UploadExpenseAttachmentRequestBody","UploadExpenseAttachmentResponse"] diff --git a/sync-for-expenses/src/codatsyncexpenses/models/operations/unlink_connection.py b/sync-for-expenses/src/codatsyncexpenses/models/operations/unlink_connection.py index d219916fb..ffdf59a6f 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/operations/unlink_connection.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/operations/unlink_connection.py @@ -4,6 +4,7 @@ import dataclasses import requests as requests_http from ..shared import connection as shared_connection +from ..shared import dataconnectionstatus as shared_dataconnectionstatus from ..shared import errormessage as shared_errormessage from codatsyncexpenses import utils from dataclasses_json import Undefined, dataclass_json @@ -13,8 +14,9 @@ @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class UnlinkConnectionRequestBody: - status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) +class UnlinkConnectionUpdateConnection: + 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.""" @@ -24,7 +26,7 @@ class UnlinkConnectionRequestBody: class UnlinkConnectionRequest: company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) - request_body: Optional[UnlinkConnectionRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + request_body: Optional[UnlinkConnectionUpdateConnection] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/account.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/account.py index 97a67b9e6..734ffba4e 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/account.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/account.py @@ -6,6 +6,7 @@ from ..shared import accounttype as shared_accounttype from codatsyncexpenses import utils from dataclasses_json import Undefined, dataclass_json +from decimal import Decimal from typing import Optional @@ -114,7 +115,7 @@ class Account: There are only a very small number of edge cases where this currency code is returned by the Codat system. """ - current_balance: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currentBalance'), 'exclude': lambda f: f is None }}) + current_balance: Optional[Decimal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currentBalance'), 'encoder': utils.decimalencoder(True, False), 'decoder': utils.decimaldecoder, 'exclude': lambda f: f is None }}) r"""Current balance in the account.""" description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) r"""Description for the account.""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/attachment.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/attachment.py index 07bd3dbbd..fbef368aa 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/attachment.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/attachment.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class Attachment: - r"""OK""" 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 ID of company in Codat""" id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/companies.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/companies.py index 54fd2cd68..3a5024fe8 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/companies.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/companies.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Companies: - 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-expenses/src/codatsyncexpenses/models/shared/companyconfiguration.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/companyconfiguration.py index 83f10996c..debbcdcbb 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/companyconfiguration.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/companyconfiguration.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class CompanyConfiguration: - r"""Success""" bank_account: shared_bankaccount.BankAccount = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bankAccount') }}) customer: shared_customer.Customer = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('customer') }}) supplier: shared_supplier.Supplier = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('supplier') }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/companysyncstatus.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/companysyncstatus.py index c48f4fe71..86269d4c1 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/companysyncstatus.py +++ b/sync-for-expenses/src/codatsyncexpenses/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-expenses/src/codatsyncexpenses/models/shared/connections.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/connections.py index e7988ab73..bdaa2596f 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/connections.py +++ b/sync-for-expenses/src/codatsyncexpenses/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-expenses/src/codatsyncexpenses/models/shared/createaccountresponse.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/createaccountresponse.py index 236fdfbac..7d8a2e8e9 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/createaccountresponse.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/createaccountresponse.py @@ -16,7 +16,6 @@ @dataclasses.dataclass class CreateAccountResponse: - r"""Success""" company_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId') }}) r"""Unique identifier for your SMB in Codat.""" data_connection_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnectionKey') }}) @@ -103,6 +102,7 @@ class CreateAccountResponse: data_type: Optional[shared_datatype.DataType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) r"""Available Data types""" 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"""The request made is not valid.""" timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInMinutes'), 'exclude': lambda f: f is None }}) timeout_in_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInSeconds'), 'exclude': lambda f: f is None }}) r"""Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/createcustomerresponse.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/createcustomerresponse.py index 4321d8141..6c8867f49 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/createcustomerresponse.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/createcustomerresponse.py @@ -16,7 +16,6 @@ @dataclasses.dataclass class CreateCustomerResponse: - r"""Success""" company_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId') }}) r"""Unique identifier for your SMB in Codat.""" data_connection_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnectionKey') }}) @@ -74,6 +73,7 @@ class CreateCustomerResponse: data_type: Optional[shared_datatype.DataType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) r"""Available Data types""" 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"""The request made is not valid.""" timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInMinutes'), 'exclude': lambda f: f is None }}) timeout_in_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInSeconds'), 'exclude': lambda f: f is None }}) r"""Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/createexpenseresponse.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/createexpenseresponse.py index 828e91391..a9011c8b2 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/createexpenseresponse.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/createexpenseresponse.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class CreateExpenseResponse: - r"""OK""" dataset_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('datasetId'), 'exclude': lambda f: f is None }}) r"""Unique id of dataset created""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/createsupplierresponse.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/createsupplierresponse.py index 823d9943f..aa18a5e45 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/createsupplierresponse.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/createsupplierresponse.py @@ -16,7 +16,6 @@ @dataclasses.dataclass class CreateSupplierResponse: - r"""Success""" company_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId') }}) r"""Unique identifier for your SMB in Codat.""" data_connection_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnectionKey') }}) @@ -74,6 +73,7 @@ class CreateSupplierResponse: data_type: Optional[shared_datatype.DataType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) r"""Available Data types""" 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"""The request made is not valid.""" timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInMinutes'), 'exclude': lambda f: f is None }}) timeout_in_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInSeconds'), 'exclude': lambda f: f is None }}) r"""Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/customer.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/customer.py index 843e88d90..e4324bb86 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/customer.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/customer.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class Customer: - r"""Success""" id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) r"""id of the customer for all income related activities to be associated to.""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/customers.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/customers.py index 42eefcfd6..818eae7fd 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/customers.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/customers.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Customers: - 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-expenses/src/codatsyncexpenses/models/shared/errormessage.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/errormessage.py index 8b3e8624c..e0b30566b 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/errormessage.py +++ b/sync-for-expenses/src/codatsyncexpenses/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-expenses/src/codatsyncexpenses/models/shared/expensetransaction.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/expensetransaction.py index 32c9419ef..d0a08575c 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/expensetransaction.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/expensetransaction.py @@ -6,6 +6,7 @@ from ..shared import expensetransactionline as shared_expensetransactionline from codatsyncexpenses import utils from dataclasses_json import Undefined, dataclass_json +from decimal import Decimal from enum import Enum from typing import Optional @@ -64,7 +65,7 @@ class ExpenseTransaction: r"""The type of transaction.""" bank_account_ref: Optional[ExpenseTransactionBankAccountReference] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bankAccountRef'), 'exclude': lambda f: f is None }}) contact_ref: Optional[shared_contactref.ContactRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactRef'), 'exclude': lambda f: f is None }}) - currency_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currencyRate'), 'exclude': lambda f: f is None }}) + currency_rate: Optional[Decimal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currencyRate'), 'encoder': utils.decimalencoder(True, False), 'decoder': utils.decimaldecoder, 'exclude': lambda f: f is None }}) r"""Rate to convert the total amount of the payment into the base currency for the company at the time of the payment. Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit. diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/expensetransactionline.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/expensetransactionline.py index e59c2f1e3..3c141ef7b 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/expensetransactionline.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/expensetransactionline.py @@ -5,6 +5,7 @@ from ..shared import recordref as shared_recordref from codatsyncexpenses import utils from dataclasses_json import Undefined, dataclass_json +from decimal import Decimal from typing import Optional @@ -13,9 +14,9 @@ @dataclasses.dataclass class ExpenseTransactionLine: account_ref: shared_recordref.RecordRef = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountRef') }}) - net_amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('netAmount') }}) + net_amount: Decimal = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('netAmount'), 'encoder': utils.decimalencoder(False, False), 'decoder': utils.decimaldecoder }}) r"""Amount of the line, exclusive of tax.""" - tax_amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('taxAmount') }}) + tax_amount: Decimal = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('taxAmount'), 'encoder': utils.decimalencoder(False, False), 'decoder': utils.decimaldecoder }}) r"""Amount of tax for the line.""" tax_rate_ref: Optional[shared_recordref.RecordRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('taxRateRef'), 'exclude': lambda f: f is None }}) tracking_refs: Optional[list[shared_recordref.RecordRef]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('trackingRefs'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/mappingoptions.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/mappingoptions.py index 61717aeb6..c23396090 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/mappingoptions.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/mappingoptions.py @@ -14,7 +14,6 @@ @dataclasses.dataclass class MappingOptions: - r"""Success""" accounts: Optional[list[shared_accountmappinginfo.AccountMappingInfo]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accounts'), 'exclude': lambda f: f is None }}) r"""Array of available accounts for mapping.""" expense_provider: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expenseProvider'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/pulloperations.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/pulloperations.py index a014c19da..1f4ea4b9b 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/pulloperations.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/pulloperations.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class PullOperations: - 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-expenses/src/codatsyncexpenses/models/shared/pushoperation.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/pushoperation.py index 185130648..ccc38c118 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/pushoperation.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/pushoperation.py @@ -15,7 +15,6 @@ @dataclasses.dataclass class PushOperation: - r"""OK""" company_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId') }}) r"""Unique identifier for your SMB in Codat.""" data_connection_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnectionKey') }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/pushoperations.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/pushoperations.py index 467b691eb..45ca4a7f1 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/pushoperations.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/pushoperations.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class PushOperations: - 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-expenses/src/codatsyncexpenses/models/shared/supplier.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/supplier.py index e9c23e0db..5537da005 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/supplier.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/supplier.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class Supplier: - r"""Success""" id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) r"""id of the supplier for all purchases to be associated to""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/suppliers.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/suppliers.py index 8892cadc5..dab47573e 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/suppliers.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/suppliers.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Suppliers: - 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-expenses/src/codatsyncexpenses/models/shared/syncinitiated.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/syncinitiated.py index fff030d65..95bcce03d 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/syncinitiated.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/syncinitiated.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class SyncInitiated: - r"""Returns the newly created SyncId""" sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/taxratemappinginfo.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/taxratemappinginfo.py index aae649e63..fee7d7463 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/taxratemappinginfo.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/taxratemappinginfo.py @@ -4,6 +4,7 @@ import dataclasses from codatsyncexpenses import utils from dataclasses_json import Undefined, dataclass_json +from decimal import Decimal from enum import Enum from typing import Optional @@ -24,13 +25,13 @@ class TaxRateMappingInfoValidTransactionTypes(str, Enum): class TaxRateMappingInfo: code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) r"""Code for the tax rate from the accounting platform.""" - effective_tax_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('effectiveTaxRate'), 'exclude': lambda f: f is None }}) + effective_tax_rate: Optional[Decimal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('effectiveTaxRate'), 'encoder': utils.decimalencoder(True, False), 'decoder': utils.decimaldecoder, 'exclude': lambda f: f is None }}) r"""Effective tax rate.""" id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) r"""Unique identifier of tax rate.""" name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) r"""Name of the tax rate in the accounting platform.""" - total_tax_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('totalTaxRate'), 'exclude': lambda f: f is None }}) + total_tax_rate: Optional[Decimal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('totalTaxRate'), 'encoder': utils.decimalencoder(True, False), 'decoder': utils.decimaldecoder, 'exclude': lambda f: f is None }}) r"""Total (not compounded) sum of the components of a tax rate.""" valid_transaction_types: Optional[list[TaxRateMappingInfoValidTransactionTypes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validTransactionTypes'), 'exclude': lambda f: f is None }}) r"""Supported transaction types for the account.""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/transaction.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/transaction.py index f2078bff9..6a1415ef9 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/transaction.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/transaction.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Transaction: - r"""Success""" integration_type: Optional[shared_integrationtype.IntegrationType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('integrationType'), 'exclude': lambda f: f is None }}) r"""Type of transaction that has been processed e.g. Expense or Bank Feed.""" message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/transactions.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/transactions.py index f1de9f9a4..bdd5cc91d 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/transactions.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/transactions.py @@ -13,7 +13,6 @@ @dataclasses.dataclass class Transactions: - 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-expenses/src/codatsyncexpenses/models/shared/updatecustomerresponse.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/updatecustomerresponse.py index 0b26a151a..c5bb8d8a0 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/updatecustomerresponse.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/updatecustomerresponse.py @@ -16,7 +16,6 @@ @dataclasses.dataclass class UpdateCustomerResponse: - r"""Success""" company_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId') }}) r"""Unique identifier for your SMB in Codat.""" data_connection_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnectionKey') }}) @@ -74,6 +73,7 @@ class UpdateCustomerResponse: data_type: Optional[shared_datatype.DataType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) r"""Available Data types""" 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"""The request made is not valid.""" timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInMinutes'), 'exclude': lambda f: f is None }}) timeout_in_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInSeconds'), 'exclude': lambda f: f is None }}) r"""Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.""" diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/updateexpenserequest.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/updateexpenserequest.py index b5c43ffd1..06ff1ea32 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/updateexpenserequest.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/updateexpenserequest.py @@ -6,6 +6,7 @@ from ..shared import expensetransactionline as shared_expensetransactionline from codatsyncexpenses import utils from dataclasses_json import Undefined, dataclass_json +from decimal import Decimal from typing import Any, Optional @@ -30,7 +31,7 @@ class UpdateExpenseRequest: contact_ref: Optional[shared_contactref.ContactRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactRef'), 'exclude': lambda f: f is None }}) currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency'), 'exclude': lambda f: f is None }}) r"""Currency the transaction was recorded in.""" - currency_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currencyRate'), 'exclude': lambda f: f is None }}) + currency_rate: Optional[Decimal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currencyRate'), 'encoder': utils.decimalencoder(True, False), 'decoder': utils.decimaldecoder, 'exclude': lambda f: f is None }}) r"""Rate to convert the total amount of the payment into the base currency for the company at the time of the payment. Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit. diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/updateexpenseresponse.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/updateexpenseresponse.py index 47672d4cc..db36ab5c0 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/updateexpenseresponse.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/updateexpenseresponse.py @@ -11,7 +11,6 @@ @dataclasses.dataclass class UpdateExpenseResponse: - r"""Accepted""" sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) diff --git a/sync-for-expenses/src/codatsyncexpenses/models/shared/updatesupplierresponse.py b/sync-for-expenses/src/codatsyncexpenses/models/shared/updatesupplierresponse.py index 1b455b00a..9db057627 100755 --- a/sync-for-expenses/src/codatsyncexpenses/models/shared/updatesupplierresponse.py +++ b/sync-for-expenses/src/codatsyncexpenses/models/shared/updatesupplierresponse.py @@ -16,7 +16,6 @@ @dataclasses.dataclass class UpdateSupplierResponse: - r"""Success""" company_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId') }}) r"""Unique identifier for your SMB in Codat.""" data_connection_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnectionKey') }}) @@ -74,6 +73,7 @@ class UpdateSupplierResponse: data_type: Optional[shared_datatype.DataType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) r"""Available Data types""" 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"""The request made is not valid.""" timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInMinutes'), 'exclude': lambda f: f is None }}) timeout_in_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInSeconds'), 'exclude': lambda f: f is None }}) r"""Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.""" diff --git a/sync-for-expenses/src/codatsyncexpenses/push_operations.py b/sync-for-expenses/src/codatsyncexpenses/push_operations.py index 94becdbb9..b4f6c8263 100755 --- a/sync-for-expenses/src/codatsyncexpenses/push_operations.py +++ b/sync-for-expenses/src/codatsyncexpenses/push_operations.py @@ -26,9 +26,13 @@ def get(self, request: operations.GetPushOperationRequest, 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, headers=headers) @@ -72,9 +76,13 @@ def list(self, request: operations.ListPushOperationsRequest, 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('GET', url, params=query_params, headers=headers) diff --git a/sync-for-expenses/src/codatsyncexpenses/sdk.py b/sync-for-expenses/src/codatsyncexpenses/sdk.py index 130413a20..d80bb463b 100755 --- a/sync-for-expenses/src/codatsyncexpenses/sdk.py +++ b/sync-for-expenses/src/codatsyncexpenses/sdk.py @@ -27,7 +27,7 @@ class CodatSyncExpenses: [See our OpenAPI spec](https://github.com/codatio/oas) - + 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-expenses-v1-api#/). """ accounts: Accounts r"""Accounts""" @@ -59,7 +59,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. @@ -72,7 +73,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() @@ -83,7 +86,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() diff --git a/sync-for-expenses/src/codatsyncexpenses/sdkconfiguration.py b/sync-for-expenses/src/codatsyncexpenses/sdkconfiguration.py index 65563417e..c9e99ef09 100755 --- a/sync-for-expenses/src/codatsyncexpenses/sdkconfiguration.py +++ b/sync-for-expenses/src/codatsyncexpenses/sdkconfiguration.py @@ -3,6 +3,8 @@ import requests from dataclasses import dataclass +from .utils.retries import RetryConfig + SERVERS = [ 'https://api.codat.io', @@ -17,8 +19,9 @@ class SDKConfiguration: server_idx: int = 0 language: str = 'python' openapi_doc_version: str = 'prealpha' - sdk_version: str = '0.35.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-expenses/src/codatsyncexpenses/suppliers.py b/sync-for-expenses/src/codatsyncexpenses/suppliers.py index 7079c2207..7f9af1bc8 100755 --- a/sync-for-expenses/src/codatsyncexpenses/suppliers.py +++ b/sync-for-expenses/src/codatsyncexpenses/suppliers.py @@ -38,9 +38,13 @@ def create(self, request: operations.CreateSupplierRequest, 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('POST', url, params=query_params, data=data, files=form, headers=headers) @@ -89,9 +93,13 @@ def get(self, request: operations.GetSupplierRequest, retries: Optional[utils.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) @@ -139,9 +147,13 @@ def list(self, request: operations.ListSuppliersRequest, 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('GET', url, params=query_params, headers=headers) @@ -196,9 +208,13 @@ def update(self, request: operations.UpdateSupplierRequest, 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('PUT', url, params=query_params, data=data, files=form, headers=headers) diff --git a/sync-for-expenses/src/codatsyncexpenses/sync.py b/sync-for-expenses/src/codatsyncexpenses/sync.py index cb107135d..e62af7719 100755 --- a/sync-for-expenses/src/codatsyncexpenses/sync.py +++ b/sync-for-expenses/src/codatsyncexpenses/sync.py @@ -26,9 +26,13 @@ def get(self, request: operations.GetSyncByIDRequest, retries: Optional[utils.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) @@ -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) @@ -164,9 +176,13 @@ def initiate_sync(self, request: operations.InitiateSyncRequest, retries: Option 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) @@ -209,9 +225,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) diff --git a/sync-for-expenses/src/codatsyncexpenses/transaction_status.py b/sync-for-expenses/src/codatsyncexpenses/transaction_status.py index cbe59cc11..bc9b73d9d 100755 --- a/sync-for-expenses/src/codatsyncexpenses/transaction_status.py +++ b/sync-for-expenses/src/codatsyncexpenses/transaction_status.py @@ -26,9 +26,13 @@ def get(self, request: operations.GetSyncTransactionRequest, retries: Optional[u 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) @@ -72,9 +76,13 @@ def list(self, request: operations.ListSyncTransactionsRequest, retries: Optiona 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-expenses/src/codatsyncexpenses/utils/utils.py b/sync-for-expenses/src/codatsyncexpenses/utils/utils.py index ea9792d0d..05eafba6c 100755 --- a/sync-for-expenses/src/codatsyncexpenses/utils/utils.py +++ b/sync-for-expenses/src/codatsyncexpenses/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